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?
fonte
Respostas:
Algumas coisas para verificar:
Você pode mudar para irrestrito?
Set-ExecutionPolicy Unrestricted
A política de grupo está definida?
Computer Configuration\Administrative Templates\Windows Components\Windows PowerShell
User Configuration\Administrative Templates\Windows Components\Windows PowerShell
Além disso, como você está chamando Script.ps1?
Isso permite que ele seja executado?
powershell.exe -executionpolicy bypass -file .\Script.ps1
fonte
Scope
parâmetro éLocalMachine
, portanto,Set-ExecutionPolicy Unrestricted
é efetivamente o mesmo queSet-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine
eu já experimentei. Sim, aTurn on Script Execution
política está habilitada paraComputer Configuration
.PowerShell
abre paraC:\Users\UserName
, então apenas executo.\Desktop\Script.ps1
o prompt. Usar o caminho absoluto produz o mesmo erro, assim como chamar o script viapowershell.exe
.gpupdate /force
? (Reinicie o PowerShell.exe depois)Unrestricted
noLocalMachine
escopo, mas quando comecei a escrever scripts eu queria executar de outros computadores,LocalMachine
retorneiUndefined
e adicionei a Política de Grupo atual para definirRemoteSigned
noMachinePolicy
escopo. Este é apenas um script de teste único e não é grande coisa executá-lo a partir da rede. Só quero saber por que ele não funciona localmente. Afinal, um script criado localmente deve ter permissão para ser executadoRemoteSigned
, certo? Só pensei que deve haver algo que estou perdendo ou não estou entendendo.RemoteSigned
salvarWrite-Host hi
com o bloco de notas em sua área de trabalho. Sua configuração também parece boa ... Algo parece estar quebrado para mim ... por isso sugeri remover a política de grupo para ver se isso ajuda.-executionpolicy bypass
superar temporariamente o problema remotamente atribuído ... e isso nos permitiu descobrir e depurar outros problemas (não relacionados, que exigiam que atualizássemos o PowerShell).O arquivo está sendo bloqueado? Eu tive o mesmo problema e consegui resolvê-lo clicando com o botão direito do mouse no arquivo .PS1, Propriedades e escolhendo Desbloquear.
fonte
'Write-Host ''Hello, World!'';' > .\Test.ps1; .\Test.ps1;
, ainda recebo o erro de que o script não está assinado digitalmente e não foi executado. Se eu abrir a caixa de diálogo Propriedades do arquivo recém-criado, não há nada para desbloquear.ps1
arquivo, clique com o botão direito sobre ele para abrir o menu de contexto e escolhaProperties
, na primeira guia perto do final, ele dirá que o arquivo está bloqueado e permitirá que você marque uma caixa de seleção para desbloqueá-lo.Finalmente rastreei isso até o .NET Code Access Security . Tenho alguns módulos binários desenvolvidos internamente que são armazenados e executados a partir de um compartilhamento de rede. Para que o .NET 2.0 / PowerShell 2.0 os carregue, eu adicionei uma regra de URL ao
Intranet
grupo de código para confiar nesse diretório:PS> & "$Env:SystemRoot\Microsoft.NET\Framework64\v2.0.50727\caspol.exe" -machine -listgroups Microsoft (R) .NET Framework CasPol 2.0.50727.5420 Copyright (c) Microsoft Corporation. All rights reserved. Security is ON Execution checking is ON Policy change prompt is ON Level = Machine Code Groups: 1. All code: Nothing 1.1. Zone - MyComputer: FullTrust 1.1.1. StrongName - ...: FullTrust 1.1.2. StrongName - ...: FullTrust 1.2. Zone - Intranet: LocalIntranet 1.2.1. All code: Same site Web 1.2.2. All code: Same directory FileIO - 'Read, PathDiscovery' 1.2.3. Url - file://Server/Share/Directory/WindowsPowerShell/Modules/*: FullTrust 1.3. Zone - Internet: Internet 1.3.1. All code: Same site Web 1.4. Zone - Untrusted: Nothing 1.5. Zone - Trusted: Internet 1.5.1. All code: Same site Web
Observe que, dependendo de quais versões do .NET estão instaladas e se é Windows de 32 ou 64 bits,
caspol.exe
podem existir nos seguintes locais, cada um com sua própria configuração de segurança (security.config
):$Env:SystemRoot\Microsoft.NET\Framework\v2.0.50727\
$Env:SystemRoot\Microsoft.NET\Framework64\v2.0.50727\
$Env:SystemRoot\Microsoft.NET\Framework\v4.0.30319\
$Env:SystemRoot\Microsoft.NET\Framework64\v4.0.30319\
Após excluir o grupo
1.2.3.
...PS> & "$Env:SystemRoot\Microsoft.NET\Framework64\v2.0.50727\caspol.exe" -machine -remgroup 1.2.3. Microsoft (R) .NET Framework CasPol 2.0.50727.9136 Copyright (c) Microsoft Corporation. All rights reserved. The operation you are performing will alter security policy. Are you sure you want to perform this operation? (yes/no) yes Removed code group from the Machine level. Success
... Fico com a configuração CAS padrão e os scripts locais agora funcionam novamente. Já faz um tempo que não mexi no CAS e não tenho certeza de por que minha regra parece interferir nas concessões
FullTrust
paraMyComputer
, mas como o CAS está obsoleto a partir do .NET 4.0 (no qual o PowerShell 3.0 é baseado), eu acho que é um ponto discutível agora.fonte
caspol.exe
, mas depois de corrercaspol.exe -machine -addgroup 1.2 -url file://Server/Share/Directory/WindowsPowerShell/Modules/* FullTrust
acabei com a mesma1.2.3.
regra vista nesta resposta. Eu estava usando umfile://
URL para fazer referência a um diretório em um compartilhamento SMB, embora eu veja na documentação que um dos-addgroup
exemplos usa um caminho UNC.Descobri ao executar um arquivo PS1 para uma unidade mapeada para o Dropbox que sempre recebo esse erro. Ao abrir propriedades para o PS1 não há "Desbloquear".
A única coisa que funciona para mim é
powershell.exe -executionpolicy bypass -file. \ Script.ps1
fonte
Bypass
política de execução já foi sugerido há mais de cinco anos e até cinco meses atrás . Leia a pergunta e as respostas existentes antes de responder.Se o arquivo for copiado de um local de rede, ou seja, outro computador, o Windows pode ter bloqueado esse arquivo. Clique com o botão direito no arquivo e clique no botão desbloquear e veja se funciona.
fonte
'Write-Host ''Hello, World!'';' > .\Test.ps1; .\Test.ps1;
, ainda recebo o erro de que o script não foi assinado digitalmente e não foi executado. Se eu abrisse a caixa de diálogo Propriedades do arquivo recém-criado, não havia nada para desbloquear.Este é um problema do IDE. Altere a configuração na GUI do PowerShell. Vá para a guia Ferramentas e selecione Opções e, em seguida, Opções de depuração . Em seguida, marque a caixa Desativar requisito para scripts a serem assinados . Feito.
fonte
O que funcionou para mim foi clicar com o botão direito no arquivo .ps1 e depois em Propriedades. Clique no botão "DESBLOQUEAR". Funciona muito bem para mim depois de passar horas tentando mudar as políticas.
fonte
Faça um backup do arquivo script.bs1
O que funcionou para mim foi excluir o arquivo script.bs1 e executar o comando de execução.
fonte
Get-ExecutionPolicy -List
?Ao executar um script .ps1 PowerShell, você pode receber a mensagem “.ps1 não está assinado digitalmente. O script não será executado no sistema. ” Para corrigir, você deve executar o comando abaixo para executar Set-ExecutionPolicy e alterar a configuração da Política de Execução.
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
fonte
Bypass
política de execução. Usar uma política diferente não é útil, de qualquer forma, e não resolve o problema real seRemoteSigned
realmente for o que é necessário. Por fim, a mensagem de erro a que você se refere não é a mesma da pergunta.Selecione o prompt de comando do terminal em vez do Power shell. Isso deve funcionar.
fonte
Eu estava tendo o mesmo problema e corrigi-lo alterando o programa padrão para abrir arquivos .ps1 para PowerShell. Foi definido como Bloco de notas .
fonte
.ps1
arquivo, ele o abre no Bloco de notas em vez de executar o script no PowerShell?Tente executar a interface do Powershell como administrador
fonte
I am both a domain administrator and a local administrator
,. Executar o PowerShell elevado não faria diferença, pois o script podia ser executado sem elevação quando armazenado em um compartilhamento de rede.Execute abaixo de 2 comandos na janela do PowerShell
Set-ExecutionPolicy irrestrito
Unblock-File -Path D: \ PowerShell \ Script.ps1
fonte