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
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.
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.
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
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
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.
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.
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.
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.