O PowerShell diz que “a execução de scripts está desativada neste sistema”.

Eu estou tentando executar o arquivo .cmd que chama um script do PowerShell no prompt de comando e estou recebendo o erro abaixo:

Management_Install.ps1 não pode ser carregado porque a execução de scripts está desativada neste sistema.

Eu executei o set-executionpolicy unrestricted e quando executo o get-executionpolicy do PowerShell, eu volto unrestricted .

// Saída do Powershell

PS C: \ Usuários \ Administrador> get-executionpolicy

Irrestrito

// Saída do DOS

C: \ Projetos \ Microsoft.Practices.ESB \ Source \ Samples \ Portal de gerenciamento \ Install \ Scr

ipts> powershell. \ Management_Install.ps1 1

AVISO: Executando o x86 PowerShell …

O arquivo C: \ Projects \ Microsoft.Practices.ESB \ Source \ Samples \ Portal de Gerenciamento \ Install \ Scripts \ Management_Install.ps1 não pode ser carregado porque a execução de scripts está desabilitada neste sistema. Por favor, consulte “get-help about_signing” para mais detalhes.

Na linha: 1 char: 25

  • \ Management_Install.ps1 <<<< 1

    • CategoryInfo: NotSpecified: (:) [], PSSecurityException

    • FullyQualifiedErrorId: RuntimeException

C: \ Projetos \ Microsoft.Practices.ESB \ Source \ Samples \ Portal de gerenciamento \ Install \ Scripts> pausar

Pressione qualquer tecla para continuar . . .

O sistema é o Windows Server 2008 R2.

O que estou fazendo de errado?

    Se você estiver usando o Windows Server 2008 R2, haverá uma versão do PowerShell para x64 e x86, sendo que ambas precisam ter suas políticas de execução definidas. Você definiu a política de execução em ambos os hosts?

    Como administrador , você pode definir a política de execução digitando isso na janela do PowerShell:

     Set-ExecutionPolicy RemoteSigned 

    Para obter mais informações, consulte Usando o cmdlet Set-ExecutionPolicy .

    Você pode ignorar essa política adicionando -ExecutionPolicy ByPass ao executar o PowerShell

     powershell -ExecutionPolicy ByPass -File script.ps1 

    Eu tive um problema semelhante e observei que o cmd padrão no Windows Server 2012 estava executando o x64.

    Para o Windows 7 , Windows 8 , Windows Server 2008 R2 ou Windows Server 2012 , execute os seguintes comandos como Administrador :

    x86 (32 bits)
    Abra C:\Windows\SysWOW64\cmd.exe
    Execute o comando powershell Set-ExecutionPolicy RemoteSigned

    x64 (64 bits)
    Abra C:\Windows\system32\cmd.exe
    Execute o comando powershell Set-ExecutionPolicy RemoteSigned

    Você pode verificar o modo usando

    • No CMD: echo %PROCESSOR_ARCHITECTURE%
    • Em Powershell: [Environment]::Is64BitProcess

    Referências:
    MSDN – Políticas de execução do Windows PowerShell
    Windows – explicação do diretório 32bit vs 64bit

    A maioria das respostas existentes explica o como , mas muito poucas explicam o porquê . E antes de você sair por aí executando código de estranhos na Internet, especialmente códigos que desabilitam medidas de segurança, você deve entender exatamente o que está fazendo. Então aqui está um pouco mais detalhadamente sobre esse problema.

    Na página de políticas de execução do TechNet:

    As políticas de execução do Windows PowerShell permitem determinar as condições sob as quais o Windows PowerShell carrega arquivos de configuração e executa scripts.

    Os benefícios dos quais, conforme enumerados pelo PowerShell Basics – Política de Execução e Assinatura de Código , são:

    • Controle de Execução – Controle o nível de confiança para executar scripts.
    • Comando Highjack – Impede a injeção de comandos no meu caminho.
    • Identidade – O script foi criado e assinado por um desenvolvedor em quem eu confio e / ou assinado com um certificado de uma autoridade de certificação em quem confio.
    • Integridade – Os scripts não podem ser modificados por malware ou usuário mal-intencionado.

    Para verificar sua política de execução atual, você pode executar Get-ExecutionPolicy . Mas você provavelmente está aqui porque quer mudar isso.

    Para isso, você executará o cmdlet Set-ExecutionPolicy .

    Você terá duas decisões importantes a fazer ao atualizar a política de execução.

    Tipo de Política de Execução:

    • Restricted – Nenhum script local, remoto ou baixado pode ser executado no sistema.
    • AllSigned – Todos os scripts que são executados precisam ser assinados digitalmente.
    • RemoteSigned – Todos os scripts remotos (UNC) ou baixados precisam ser assinados.
    • Unrestricted – Nenhuma assinatura para qualquer tipo de script é necessária.

    Âmbito da nova mudança

    • LocalMachine – A política de execução afeta todos os usuários do computador.
    • CurrentUser – A política de execução afeta apenas o usuário atual.
    • Process – A política de execução afeta apenas o processo atual do Windows PowerShell.

    † = padrão

    Por exemplo : se você quisesse alterar a política para RemoteSigned apenas para o CurrentUser, você executaria o seguinte comando:

     Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser 

    Nota : Para alterar a política de Execução, você deve estar executando o PowerShell As Adminstrator . Se você estiver no modo regular e tentar alterar a política de execução, receberá o seguinte erro:

    O access à chave de registro ‘HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ ShellIds \ Microsoft.PowerShell’ foi negado. Para alterar a diretiva de execução do escopo padrão (LocalMachine), inicie o Windows PowerShell com a opção “Executar como administrador”.

    Se você quiser aumentar as restrições internas em seus próprios scripts que não foram baixados da Internet (ou pelo menos não contêm os metadados UNC), você pode forçar a diretiva a executar somente sripts assinados. Para assinar seus próprios scripts, você pode seguir as instruções no artigo de Scott Hanselman sobre assinatura de scripts do PowerShell .

    Nota : A maioria das pessoas provavelmente terá esse erro sempre que abrir o Powershell, porque a primeira coisa que o PS tenta fazer quando é iniciado é executar o script de perfil de usuário que configura o ambiente da maneira que você preferir.

    O arquivo geralmente está localizado em:

     %UserProfile%\My Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1 

    Você pode encontrar o local exato executando a variável powershell

     $profile 

    Se não houver nada com o que você se importa no perfil e não quiser mexer nas configurações de segurança, basta excluí-lo e o PowerShell não encontrará nada que não possa ser executado.

    No Windows 7:

    Vá para o menu Iniciar e procure por “Windows PowerShell ISE”.

    Clique com o botão direito na versão x86 e escolha “Executar como administrador”.

    Na parte superior, cole Set-ExecutionPolicy RemoteSigned ; execute o script. Escolha “Sim”.

    Repita essas etapas para a versão de 64 bits do Powershell ISE também (a versão não x86).

    Estou apenas esclarecendo os passos que o @Chad Miller sugeriu. Obrigado Chad!

    Também executando este comando antes que o script também resolva o problema:

     set-executionpolicy unrestricted 

    Se você estiver em um ambiente em que não é um administrador, poderá definir a Política de Execução apenas para você e não exigirá o administrador.

     Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned" 

    ou

     Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "Unrestricted" 

    Você pode ler tudo sobre isso na input de ajuda.

     Help Get-ExecutionPolicy -Full Help Set-ExecutionPolicy -Full 

    RemoteSigned: todos os scripts que você criou serão executados e todos os scripts baixados da Internet precisarão ser assinados por um editor confiável.

    OK, mude a política simplesmente digitando:

     Set-ExecutionPolicy RemoteSigned 

    Estou usando o Windows 10 e não consegui executar nenhum comando. O único comando que me deu algumas pistas foi o seguinte:

    [x64]

    1. Abra C: \ Windows \ SysWOW64 \ cmd.exe [como administrador]
    2. Execute o comando> powershell Set-ExecutionPolicy Unrestricted

    Mas isso não funcionou. Foi limitado. Provavelmente novas políticas de segurança para o Windows10. Eu tive esse erro:

    Set-ExecutionPolicy: o Windows PowerShell atualizou sua política de execução com êxito, mas a configuração é substituída por uma política definida em um escopo mais específico. Devido à substituição, seu shell manterá sua atual política de execução efetiva de …

    Então eu encontrei outro caminho ( solução ):

    1. Abra o comando / consola de execução ( Win + R )
    2. Tipo: gpedit.msc (editor de diretiva de grupo )
    3. Navegue até Diretiva do Computador Local -> Configuração do Computador -> Modelos Administrativos -> Componentes do Windows -> Windows Powershell .
    4. Ativar ” Ativar a Execução de Script
    5. Defina a política conforme necessário. Eu defini o meu para ” Permitir todos os scripts “.

    Agora abra o PowerShell e aproveite;)

    Podemos obter o status da ExecutionPolicy atual pelo comando abaixo:

     Get-ExecutionPolicy; 

    Por padrão, é restrito . Para permitir a execução de scripts do PowerShell, precisamos definir essa Política de Execução como Ignorar ou Irrestrito .

    Podemos definir a política do 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; 

    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 permissão antes de ser executado.

    Enquanto na diretiva Bypass , nada é bloqueado e não há avisos ou prompts durante a execução do script. Bypass ExecutionPolicy é mais descontraído do que Unrestricted .

    Definir a política de execução é específico do ambiente. Se você estiver tentando executar um script do ISE x86 em execução, precisará usar o x86 PowerShell para definir a política de execução. Da mesma forma, se você estiver executando o ISE de 64 bits, precisará definir a política com o PowerShell de 64 bits.

    Você também pode ignorar isso usando o seguinte comando:

     PS > powershell Get-Content .\test.ps1 | Invoke-Expression 

    Você também pode ler este artigo de Scott Sutherland, que explica 15 maneiras diferentes de ignorar o PowerShell Set-ExecutionPolicy se você não tiver privilégios de administrador:

    15 maneiras de contornar a política de execução do PowerShell

    1. Abra o PowerShell como administrador e execute Set-ExecutionPolicy -Scope CurrentUser
    2. Fornecer RemoteSigned e pressione Enter
    3. Executar Set-ExecutionPolicy -Scope CurrentUser
    4. Forneça irrestrito e pressione Enter

    Clique em Win + R e digite copy paste e pressione OK :

     powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned" 

    E execute seu script.

    Em seguida, reverta as alterações como:

     powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "AllSigned" 

    No editor ISE do PowerShell, encontrei a execução da seguinte linha primeiro scripts permitidos.

     Set-ExecutionPolicy RemoteSigned -Scope Process 

    No PowerShell 2.0, a política de execução foi definida como desativada por padrão.

    A partir daí, a equipe do PowerShell fez muitos aprimoramentos e está confiante de que os usuários não dividirão muito as tarefas durante a execução de scripts. Assim, a partir do PowerShell 4.0, ele é ativado por padrão.

    No seu caso, digite Set-ExecutionPolicy RemoteSigned no console do PowerShell e diga sim.

    Vá para o caminho do registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell e defina ExecutionPolicy como RemoteSigned .

    Se você está aqui por causa da execução com Ruby ou Chef e usando “ system execution, execute como segue:

     `powershell.exe -ExecutionPolicy Unrestricted -command [Environment]::GetFolderPath(\'mydocuments\')` 

    Esse comando é para obter a pasta “MyDocuments”.

    -ExecutionPolicy Unrestricted faz o truque.

    Espero que seja útil para outra pessoa.

    Várias respostas apontam para a política de execução. No entanto, algumas coisas exigem “administrador runas” também. Isso é mais seguro, pois não há alteração permanente na política de execução e pode passar pela restrição do administrador. Use com schedtask para iniciar um lote com:

      runas.exe /savecred /user:administrator powershell -ExecutionPolicy ByPass -File script.ps1 

    tanto de Jack Edmonds acima, e Peter Mortensen / Dhana de post Como executar um aplicativo como “executar como administrador” no prompt de comando?

    Eu encontrei esta linha funcionou melhor para um dos meus servidores Windows Server 2008 R2. Alguns outros não tiveram problemas sem essa linha em meus scripts do PowerShell:

     Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force -Scope Process 

    Eu tive o mesmo problema hoje. A política de execução de 64 bits foi irrestrita, enquanto a de 32 bits foi restrita.

    Veja como alterar apenas a política de 32 bits remotamente:

     Invoke-Command -ComputerName $servername -ConfigurationName Microsoft.PowerShell32 -scriptblock {Set-ExecutionPolicy unrestricted} 

    Abra a janela do PowerShell como um administrador . Vai funcionar.