Como essa pergunta continua a atrair respostas que são refutadas pelo corpo da pergunta ou não abordam o problema real, leia este resumo simples do que você precisa saber:
- Isso não é um "Por que minha instalação padrão do PowerShell não executa scripts?" questão.
- Isso não é um "Por que minha instalação do PowerShell não executa scripts baixados da Internet?" questão.
- A questão é por que a
RemoteSigned
política de execução está impedindo a execução do script, quando não deveria.RemoteSigned
é a única política de execução que desejo usar. Estou ciente de que outras políticas menos restritivas estão disponíveis. Se essas políticas fossem substitutos aceitáveis, eu simplesmente os teria usado e esta pergunta não existiria.- A política de execução já está definida para
RemoteSigned
. Mudar deRemoteSigned
paraRemoteSigned
não é uma solução.- O arquivo de script é criado e armazenado localmente.
- O arquivo de script não está bloqueado. O arquivo de script nunca foi bloqueado (veja o ponto anterior).
- O arquivo de script não pode ser desbloqueado porque não há nada para desbloquear (veja o ponto anterior).
- O arquivo de script é (tentou-se) executado por um administrador.
Windows PowerShell
é o único aplicativo envolvido. Nem,Windows PowerShell ISE
nemCommand Prompt
quaisquer outras ferramentas ou editores são relevantes.- A causa do problema já foi identificada (ver resposta aceita). Depois de quase 8 anos, acho que todas as outras explicações óbvias, aplicáveis ou não, também foram postadas. Se você pensa de outra forma , leia a pergunta e as respostas existentes na íntegra antes de adicionar as suas.
Estou usando o Windows PowerShell 2.0 no Windows 7 Professional de 64 bits. Tenho um script no meu Desktop
que causa o seguinte erro quando tento executá-lo:
File C:\Users\UserName\Desktop\Script.ps1 cannot be loaded. The file C:\Users\UserName\Desktop\Script.ps1 is not digitally signed. The script will not execute on the system. Please see "get-help about_signing" for more details..
At line:1 char:54
+ C:\Users\UserName\Desktop\TestGetWindowsUpdateLog.ps1 <<<<
+ CategoryInfo : NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId : RuntimeException
Sou administrador de domínio e administrador local e, se executar Get-ExecutionPolicy -List
, posso ver que o Group Policy Object
que criei para configurar o PowerShell está aplicando corretamente a RemoteSigned
política de execução no nível da máquina:
Scope ExecutionPolicy
----- ---------------
MachinePolicy RemoteSigned
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine Undefined
Eu criei o script me em Notepad
, e usou os Sysinternals ' streams
utilidade e o arquivo Properties
de diálogo para confirmar que o script não está sendo tratado como tendo chegado a partir da internet. Se eu copiar o script para um compartilhamento de rede em um servidor de domínio, ele terá permissão para ser executado. Se eu executar Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine
, o script local ainda não MachinePolicy
terá permissão para ser executado, o que faz sentido, pois a política de execução no escopo terá precedência.
Conforme documentado por about_Execution_Policies
( atual ; no momento da questão ), a RemoteSigned
política significa:
Os scripts podem ser executados.
Requer uma assinatura digital de um editor confiável em scripts e arquivos de configuração baixados da Internet (incluindo programas de e-mail e mensagens instantâneas).
Não requer assinaturas digitais em scripts que você executou e que escreveu no computador local (não baixado da Internet).
Riscos de execução de scripts não assinados de fontes diferentes da Internet e scripts assinados, mas mal-intencionados.
Meu script não é assinado, mas como é criado e executado localmente, ele deve atender ao terceiro ponto acima. Portanto...
- Por que meu script não está autorizado a ser executado?
- Por que o PowerShell reclama que meu script "não está assinado digitalmente" quando esse requisito deveria se aplicar apenas a arquivos da Internet?
- Por que o PowerShell não se preocupa mais com o fato de o script não ser assinado quando é executado em um compartilhamento de rede?