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
fonte
LocalMachine
. Para definir para outros escopos (CurrentUser
ouProcess
), passe-Scope
explicitamente.A Política de Execução Padrão está definida como restrita. Você pode vê-la digitando:
Você deve digitar o seguinte para fazê-lo ir para o modo irrestrito:
Espero que isto ajude
fonte
RemoteSigned
não bloqueia copiar e colar, não bloqueia o git ou outros métodos de download que não sejam do IE, para que serve? Diga comigo: "absolutamente nada!". Acho que exigir que os scripts sejam assinados com um certificado de assinatura de código de US $ 100 é inútil, estúpido e nega tudo de bom que uma linguagem de script decente pode fazer pelo Windows. Dito isto, se o caminho a seguir for fazer com que os usuários entendam o que estão fazendo para usar os scripts PS, então talvez estejamos demais ... Nahhhh, isso nunca funcionará ;-)Na minha máquina que eu uso para scripts de desenvolvimento, usarei -unrestricted como acima. Entretanto, ao implantar meus scripts em uma máquina de usuário final, chamarei apenas o powershell com a opção -executionpolicy:
fonte
Podemos obter o status atual da ExecutionPolicy pelo comando abaixo:
Por padrão, é restrito . Para permitir a execução de scripts do PowerShell, precisamos definir este ExecutionPolicy como Bypass ou Irrestrito .
Podemos definir a política do Usuário Atual como
Bypass
ouUnrestricted
usando qualquer um dos comandos abaixo do PowerShell:A política irrestrita 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 uma permissão antes da execução.
Enquanto na política de desvio , nada é bloqueado e não há avisos ou avisos durante a execução do script. Ignorar ExecutionPolicy é mais relaxado do que Irrestrito.
fonte
Dependendo da versão e configuração do Windows, você pode receber o seguinte aviso, mesmo no
Unrestricted
modo:A solução é usar a política "ignorar", habilitada com o seguinte comando:
A partir da documentação :
Isso é obviamente inseguro, por favor, entenda os riscos envolvidos.
fonte
Uma chave de registro com:
Windows Registry Editor Versão 5.00
e:
funciona de fato também.
fonte
Por alguma razão, o cmdlet do PowerShell não habilitou a execução local globalmente, apenas para o contexto do usuário local. Se eu tentasse iniciar um script do Powershell a partir do prompt bash do CygWin, por exemplo, que é executado em seu próprio contexto de usuário, ele não seria executado, fornecendo o erro "não está assinado digitalmente". A resposta foi acessar o Editor de Diretiva de Grupo Local -> Diretiva do Computador Local -> Modelos Administrativos -> Componentes do Windows -> Windows PowerShell e clicar duas vezes em 'Ativar Execução de Script'. Isso permite alterar para 'Ativado' e, em seguida, a política de execução de "Permitir scripts locais e scripts assinados remotamente" e fazer com que funcione globalmente, independentemente do contexto do usuário.
fonte
A resposta aceita está correta, mas a modificação de política está disponível apenas para a instância atualmente em execução do Powershell, ou seja, quando a instância do Powershell for encerrada. A política será redefinida. Se um usuário reabrir outra instância do Powershell, será aplicada a política padrão que é
Restricted
Para mim, preciso usar o console do VisualStudio Code e o g ++ da cygwin para criar coisas. O console está usando o Powershell, com a política padrão, nada pode ser feito. Uma solução é alterar a política toda vez que o console é acionado no console do VisualStudio Code, talvez um script para alterar a política.
Sou preguiçoso, então outra solução é quando executo o Powershell no modo de administrador, semelhante ao que a resposta aceita faz. mas com um parâmetro extra que altera os valores na tabela Registro. Uma vez feito. Outras instâncias do Powershell usarão a
RemoteSigned
política por padrão.set-executionpolicy remotesigned -Scope CurrentUser
fonte
Definir a política (corretamente) é a melhor opção, mas nos meus sistemas gerenciados não tenho a capacidade de alterar essa política.
Para mim, a solução mais simples para alterar a política é abrir o script no "PowerShell ISE" , destacar o código (ou parte do código) a ser executado e clicar no botão "Executar seleção" (ou usar o F8 atalho).
Essa não é a melhor solução e faz pouco para automatizar tarefas, mas me permite o uso e o utilitário do PowerShell enquanto não estou em conflito com meu departamento de SI.
fonte
A razão pela qual a chave reg funciona é porque está fazendo exatamente o que os comandos PS fazem. Os comandos escrevem as alterações nas chaves reg. Os comandos são muito mais rápidos e fáceis do que criar uma chave reg ou cavar no registro.
fonte