Questão Como habilitar a execução de scripts do PowerShell?


Quando tento executar meu script do PowerShell, recebo este erro:

O arquivo C: \ Common \ Scripts \ hello.ps1 não pode ser carregado porque a execução de scripts está desativada neste sistema. Por favor, consulte "get-help about_signing" para mais detalhes.
  Na linha: 1 char: 13
  +. \ hello.ps1 <<<<
      + CategoryInfo: NotSpecified: (:) [], PSSecurityException
      + FullyQualifiedErrorId: RuntimeException


181


origem




Respostas:


  1. Inicie o Windows PowerShell com a opção "Executar como administrador". Somente membros do grupo Administradores no computador podem alterar a diretiva de execução.

  2. Ative a execução de scripts não assinados digitando:

    set-executionpolicy remotesigned
    

Isso permitirá a execução de scripts não assinados que você escreve em seu computador local e assina scripts da Internet.

Veja também Executando Scripts na biblioteca Microsoft TechNet.


271



+1 para remotesigned em vez de irrestrito. Você pode executar seus scripts locais sem se expor a perigos de qualquer outro lugar. - DarrellNorton
Obrigado - este post me ajudou. No entanto, ainda tive mais problemas porque não tinha executado o PowerShell "como administrador" no win8 - sergeantKK
Isso alterará a política permanentemente ou terei que fazer isso toda vez que eu reiniciar meu computador? - Ray
Existe uma maneira de ativar a execução de um específico script de powershell? Então, talvez eu só queira permitir hello.ps1 do OP ou Microsoft.PowerShell_profile.ps1 na caixa de um usuário? (Eu acho que, indiscutivelmente, cai sob a questão OP amplamente reconhecidamente (ha, que eu agora vejo também é seu!). Se você acha que é uma nova pergunta, eu posso perguntar.) - ruffin
@ruffin Você poderia, por favor, fazer uma pergunta separada para isso? Você pode então ligá-lo aqui. - Pavel Chuchuva


A Política de Execução Padrão está definida como restrita, você pode vê-la digitando:

Get-ExecutionPolicy

Você deve digitar o seguinte para ir para o modo irrestrito:

Set-ExecutionPolicy unrestricted

Espero que isto ajude


60



-1. que é muito aberto para apenas executar. RemoteSigned é melhor. - TomTom
A assinatura exigida faz sentido se você espera que o usuário copie e cole scripts maliciosos da Internet. Se você assumir que o usuário não é estúpido, "remotesigned" não adiciona segurança e dificulta a vida. - Guss


Na minha máquina que eu uso para scripts dev, vou usar-unrestricted como acima. Ao implantar meus scripts, no entanto, em uma máquina de usuário final, apenas chamarei o powershell com a opção -executionpolicy:

powershell.exe -noprofile -executionpolicy bypass -file .\script.ps1

48



Você pode combinar esse truque com um truque poliglota em um arquivo .CMD. Vejo stackoverflow.com/a/8597794/5314 - Jay Bazuzi
Agradável! Eu tenho implantado sfx feito por winrar rarlabs.com - MDMoore313
Esse truque permitiu-me executar script powershell de Git Bash (MINGW32 bash) - Kamil Szot


Podemos obter o status da ExecutionPolicy atual pelo comando abaixo:

Get-ExecutionPolicy;

Por padrão, é Restrito. Para permitir a execução dos Scripts do PowerShell, precisamos definir essa Política de Execução como Ignorar ou Irrestrito.

Podemos definir a política para o usuário atual como Bypass ou Unrestricted usando qualquer um dos comandos abaixo do PowerShell:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force;

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted -Force;

Irrestrito A política carrega todos os arquivos de configuração e executa todos os scripts. Se você executar um script não assinado que foi baixado da Internet, será solicitada permissão antes de ser executado.

Considerando que Ignorar política, nada é bloqueado e não há avisos ou prompts durante a execução do script. Bypass ExecutionPolicy é mais descontraído do que Unrestricted.


7





Dependendo da versão e configuração do Windows, você pode ter o seguinte aviso, mesmo em Unrestricted modo:

Security warning
Run only scripts that you trust. While scripts from the internet can be useful, this
script can potentially harm your computer. If you trust this script, use the 
Unblock-File cmdlet to allow the script to run without this warning message. 
Do you want to run?
[D] Do not run  [R] Run once  [S] Suspend  [?] Help (default is "D")

A solução é usar a política "ignorar", ativada com o seguinte comando:

Set-ExecutionPolicy Bypass

De documentação:

Bypass: Nada é bloqueado e não há avisos ou prompts.

Isso é obviamente inseguro, por favor, entenda os riscos envolvidos.


3



essa foi a única maneira que consegui fazer com que meu script fosse executado em um ambiente WINE com o powershell 2.0. Obrigado. - Wyatt8740


Uma chave reg com:
Windows Registry Editor versão 5.00

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Policies \ Microsoft \ Windows \ PowerShell]   "EnableScripts" = dword: 00000001 "ExecutionPolicy" = "Ignorar"

e:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\PowerShell]
"EnableScripts"=dword:00000001 "ExecutionPolicy"="Unrestricted"

funciona de fato também.


1





A razão pela qual a chave reg funciona, é porque está fazendo exatamente o que os comandos PS fazem. Os comandos gravam as alterações nas chaves reg. Os comandos são muito mais rápidos e fáceis do que criar uma chave reg ou procurar no registro.


-1



Isso é simplesmente errado: as chaves que foram mencionadas em outras respostas alteram a política de execução do powershell, que então permite que o script do powershell seja executado. - Patrick R.