Pergunta

Escrevi um arquivo em lote simples como um script do PowerShell e estou recebendo erros quando eles são executados.

Está em um diretório de scripts no meu caminho.

Cannot be loaded because the execution of scripts is disabled on this system. 
please see "get-help about-signing".

Procurei na ajuda, mas não é nada útil.

Foi útil?

Solução

Poderia ser o nível de segurança padrão do PowerShell, que (IIRC) executará apenas scripts assinados.

Tente digitar isto:

set-executionpolicy remotesigned

Isso dirá ao PowerShell para permitir a execução de scripts locais (ou seja, em uma unidade local) não assinados.

Em seguida, tente executar seu script novamente.

Outras dicas

Você precisa correr Set-ExecutionPolicy:

Set-ExecutionPolicy Restricted <-- Will not allow any powershell scripts to run.  Only individual commands may be run.

Set-ExecutionPolicy AllSigned <-- Will allow signed powershell scripts to run.

Set-ExecutionPolicy RemoteSigned <-- Allows unsigned local script and signed remote powershell scripts to run.

Set-ExecutionPolicy Unrestricted <-- Will allow unsigned powershell scripts to run.  Warns before running downloaded scripts.

Set-ExecutionPolicy Bypass <-- Nothing is blocked and there are no warnings or prompts.

Usar:

Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

Sempre use o comando acima para permitir a execução do PowerShell na sessão atual.

Consegui contornar esse erro invocando o PowerShell assim:

powershell -executionpolicy bypass -File .\MYSCRIPT.ps1

Ou seja, adicionei o -executionpolicy bypass à maneira como invoquei o script.

Isso funcionou no Windows 7 Service Pack 1.Eu sou novo no PowerShell, então pode haver advertências sobre isso que eu não conheço.

[Editar 26/06/2017] Continuei a usar essa técnica em outros sistemas, incluindo Windows 10 e Windows 2012 R2 sem problemas.

Aqui está o que estou usando agora.Isso me impede de executar acidentalmente o script clicando nele.Quando executo no agendador, adiciono um argumento:"agendador" e isso ignora o prompt.

Isso também pausa a janela no final para que eu possa ver a saída do PowerShell.

if NOT "%1" == "scheduler" (
   @echo looks like you started the script by clicking on it.
   @echo press space to continue or control C to exit.
   pause
)

C:
cd \Scripts

powershell -executionpolicy bypass -File .\rundps.ps1

set psexitcode=%errorlevel%

if NOT "%1" == "scheduler" (
   @echo Powershell finished.  Press space to exit.
   pause
)

exit /b %psexitcode%
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

O comando acima funcionou para mim mesmo quando ocorreu o seguinte erro:

Access to the registry key 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied.

Também vale a pena saber que pode ser necessário incluir .\ na frente do nome do script.Por exemplo:

.\scriptname.ps1

O comando set-executionpolicy unrestricted permitirá que qualquer script que você criar seja executado como o usuário conectado.Apenas certifique-se de definir a configuração de execução de política de volta para assinada usando o set-executionpolicy signed comando antes de sair.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top