2010-02-08 18:41:03 +0000 2010-02-08 18:41:03 +0000
305
305

Como activar a execução de scripts PowerShell?

Quando tento executar o meu script PowerShell recebo este erro:

File C:\Common\Scripts\hello.ps1 não pode ser carregado porque a execução de scripts está desactivada neste sistema. Por favor veja “get-help about_signing” para mais detalhes. Em line:1 char:13 + .\hello.ps1 \ <<<<<< + CategoryInfo : NotSpecified: (:) [:), PSSecurityException + FullyQualifiedErrorId : RuntimeException

Respostas (10)

451
451
451
2010-02-08 18:44:16 +0000
  1. Inicie o Windows PowerShell com a opção “Run as Administrator” (Executar como Administrador). Apenas os membros do grupo de Administradores no computador podem alterar a política de execução.

  2. Habilitar a execução de scripts não assinados entrando:

Isto permitirá executar scripts não assinados que você escreve no seu computador local e scripts assinados a partir da Internet.

Veja também Running Scripts na Biblioteca Microsoft TechNet.

91
91
91
2010-02-08 18:43:25 +0000

A Default Execution Policy (Política de Execução por Defeito) está definida para restricted, pode vê-la digitando:

Get-ExecutionPolicy

Deve digitar o seguinte para que passe para o modo sem restrições:

Set-ExecutionPolicy unrestricted

Espero que isto ajude

66
66
66
2013-01-14 00:46:49 +0000

Na minha máquina que utilizo para desenvolver guiões, vou utilizar - sem restrições, como acima referido. No entanto, ao implementar os meus scripts numa máquina do utilizador final, apenas chamarei a powerhell com a opção -executionpolicy switch:

powershell.exe -noprofile -executionpolicy bypass -file .\script.ps1
21
21
21
2016-09-07 07:06:18 +0000

Podemos obter o estado da actual ExecutionPolicy através do comando abaixo:

Get-ExecutionPolicy;

Por defeito é Restrito. Para permitir a execução de PowerShell Scripts precisamos de definir esta ExecutionPolicy como *Bypass** ou Unrestricted.

Podemos definir a política para Current User como Bypass ou Unrestricted usando qualquer um dos comandos PowerShell abaixo:

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

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

Unrestricted a política carrega todos os ficheiros de configuração e corre todos os scripts. Se correr um script não assinado que foi descarregado da Internet, é-lhe pedida permissão antes de ser executado.

Considerando que na política Bypass, nada é bloqueado e não há avisos ou avisos durante a execução do script. Bypass ExecutionPolicy é mais relaxado do que irrestrito.

5
5
5
2016-01-21 10:01:36 +0000

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

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 é utilizar a política de “bypass”, activada com o seguinte comando:

Set-ExecutionPolicy Bypass

A partir da documentação :

Bypass: Nada está bloqueado e não existem avisos ou avisos.

Isto é obviamente inseguro, por favor compreenda os riscos envolvidos.

3
3
3
2017-11-29 10:10:20 +0000

A reg key with: Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\PowerShell] “EnableScripts”=dword:00000001 “ExecutionPolicy”=“Bypass”

e:

Windows Registry Editor Version 5.00

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

também funciona de facto.

1
1
1
2018-12-04 22:06:53 +0000

Por alguma razão o PowerShell cmdlet não permitiu a execução local a nível global, apenas para o contexto do utilizador local. Se eu tentasse iniciar um script Powershell a partir do prompt de bash do CygWin, por exemplo, que corre no seu próprio contexto de utilizador, ele não seria executado, dando o erro “não está assinado digitalmente”. A resposta foi ir ao Local Group Policy Editor -\ > Local Computer Policy -\ > Administrative Templates -\ > Windows Components -\ > Windows PowerShell e clicar duas vezes em ‘Turn on Script Execution’. Isto permite-me então alterá-lo para ‘Activado’ e depois a política de execução de “Permitir scripts locais e scripts assinados remotamente” e fazê-la funcionar globalmente independentemente do contexto do utilizador.

1
1
1
2019-04-24 14:47:15 +0000

Definir a política (correctamente) é a melhor escolha, mas nos meus sistemas geridos não tenho a capacidade de alterar essa política.

** Para mim, a solução mais simples para alterar a política é abrir o guião no “PowerShell ISE”, realçar o código (ou parte do código) para executar e depois clicar no botão “Run Selection” (ou utilizar o atalho F8). ** Esta não é a melhor solução e faz pouco para automatizar tarefas, mas permite-me a utilização e utilidade do PowerShell enquanto não estou a executar o meu departamento de SI.

1
1
1
2018-12-15 01:09:31 +0000

A resposta aceite é correcta, mas a modificação da política só está disponível para a instância actualmente em curso do Powershell, ou seja, quando a instância do Powershell é encerrada. A política será reajustada. Se um usuário reabrir outra instância do Powershell, a política padrão será aplicada que é Restricted

Para mim, preciso usar a console do VisualStudio Code e g++ do cygwin para construir coisas. A consola está a usar Powershell, com a política por defeito, nada pode ser feito. Uma solução é alterar a política sempre que a consola é disparada na consola VisualStudio Code, talvez um script de alteração da política.

Sou preguiçoso, por isso outra solução é quando corro o Powershell em modo admin, semelhante ao que a resposta aceite faz. mas com um parâmetro extra que altera os valores na tabela do Registo. Uma vez feito isso. Outras instâncias de Powershell irão utilizar a política RemoteSigned por defeito.

set-executionpolicy remotesigned -Scope CurrentUser

-2
-2
-2
2018-04-05 13:49:49 +0000

A razão pela qual a chave reg funciona, é porque está a fazer exactamente o que os comandos PS fazem. Os comandos escrevem as alterações às teclas reg. Os comandos são muito mais rápidos e fáceis do que criar uma chave de reg ou cavar no registo.