about_Execution_Policies

Descrição breve

Descreve as políticas de execução do PowerShell e explica como gerenciá-las.

Descrição longa

A política de execução do PowerShell é um recurso de segurança que controla as condições sob as quais o PowerShell carrega arquivos de configuração e executa scripts. Esse recurso ajuda a impedir a execução de scripts mal-intencionados.

em um computador Windows, você pode definir uma política de execução para o computador local, para o usuário atual ou para uma sessão específica. Você também pode usar uma configuração de Política de Grupo para definir políticas de execução para computadores e usuários.

As políticas de execução para o computador local e o usuário atual são armazenadas no registro. Você não precisa definir políticas de execução no seu perfil do PowerShell. A política de execução para uma sessão específica é armazenada apenas na memória e é perdida quando a sessão é fechada.

A política de execução não é um sistema de segurança que restringe as ações do usuário. Por exemplo, os usuários podem ignorar facilmente uma política digitando o conteúdo do script na linha de comando quando não puderem executar um script. Em vez disso, a política de execução ajuda os usuários a definir regras básicas e impede que eles as violem involuntariamente.

em computadores não Windows, a política de execução padrão é Unrestricted e não pode ser alterada. O Set-ExecutionPolicy cmdlet está disponível, mas o PowerShell exibe uma mensagem de console que não tem suporte. embora Get-ExecutionPolicy o retorne Unrestricted em plataformas não Windows, o comportamento realmente corresponde, Bypass pois essas plataformas não implementam as zonas de Segurança do Windows.

Políticas de execução do PowerShell

a imposição dessas políticas ocorre apenas em plataformas Windows. As políticas de execução do PowerShell são as seguintes:

AllSigned

  • Os scripts podem ser executados.
  • Requer que todos os arquivos de configuração e scripts sejam assinados por um editor confiável, incluindo scripts escritos no computador local.
  • O solicita antes de executar scripts de editores que você ainda não classificou como confiáveis ou não confiáveis.
  • Riscos em execução assinada, mas mal-intencionados, scripts.

Bypass

  • Nada está bloqueado e não há avisos ou prompts.
  • Essa política de execução é projetada para configurações nas quais um script do PowerShell é integrado a um aplicativo maior ou para configurações em que o PowerShell é a base para um programa que tem seu próprio modelo de segurança.

Default

  • Define a política de execução padrão.
  • Restricted para clientes Windows.
  • RemoteSigned para servidores de Windows.

RemoteSigned

  • a política de execução padrão para computadores do Windows server.
  • Os scripts podem ser executados.
  • Requer uma assinatura digital de um editor confiável em arquivos de configuração e scripts que são baixados da Internet, que inclui programas de email e mensagens instantâneas.
  • Não requer assinaturas digitais em scripts que são gravados no computador local e não baixados da Internet.
  • Executa scripts que são baixados da Internet e não assinados, se os scripts forem desbloqueados, como usando o Unblock-File cmdlet.
  • Riscos que executam scripts não assinados de fontes diferentes da Internet e scripts assinados que podem ser mal-intencionados.

Restricted

  • a política de execução padrão para computadores cliente Windows.
  • Permite comandos individuais, mas não permite scripts.
  • Impede a execução de todos os arquivos de script, incluindo arquivos de formatação e configuração ( .ps1xml ), arquivos de script de módulo ( .psm1 ) e perfis do PowerShell ( .ps1 ).

Undefined

  • Não há nenhuma política de execução definida no escopo atual.
  • se a política de execução em todos os escopos for Undefined , a política de execução efetiva será Restricted para clientes de Windows e RemoteSigned para Windows Server.

Unrestricted

  • a política de execução padrão para computadores não Windows e não pode ser alterada.
  • Os scripts não assinados podem ser executados. Há um risco de executar scripts mal-intencionados.
  • Avisa o usuário antes de executar scripts e arquivos de configuração que não são da zona da intranet local.

Observação

Em sistemas que não diferenciam caminhos UNC (Convenção de nomenclatura universal) de caminhos da Internet, os scripts identificados por um caminho UNC podem não ter permissão para serem executados com a política de execução RemoteSigned .

Escopo da política de execução

Você pode definir uma política de execução que só é eficaz em um escopo específico.

Os valores válidos para Scope são MachinePolicy , UserPolicy, Process , CurrentUser e LocalMachine. LocalMachine é o padrão ao definir uma política de execução.

Os Scope valores são listados em ordem de precedência. A política que tem precedência é eficaz na sessão atual, mesmo que uma política mais restritiva tenha sido definida em um nível mais baixo de precedência.

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

MachinePolicy

Definido por um Política de Grupo para todos os usuários do computador.

UserPolicy

Definido por um Política de Grupo para o usuário atual do computador.

Process

O Process escopo afeta apenas a sessão atual do PowerShell. A política de execução é salva na variável de ambiente $env:PSExecutionPolicyPreference , em vez de no registro. Quando a sessão do PowerShell é fechada, a variável e o valor são excluídos.

CurrentUser

A política de execução afeta apenas o usuário atual. Ele é armazenado na subchave do registro HKEY_CURRENT_USER .

LocalMachine

A política de execução afeta todos os usuários no computador atual. Ele é armazenado na subchave do registro HKEY_LOCAL_MACHINE .

Gerenciando a política de execução com o PowerShell

Para obter a política de execução efetiva para a sessão atual do PowerShell, use o Get-ExecutionPolicy cmdlet.

O comando a seguir obtém a política de execução efetiva:

Get-ExecutionPolicy

Para obter todas as políticas de execução que afetam a sessão atual e exibi-las em ordem de precedência:

Get-ExecutionPolicy -List

O resultado é semelhante ao seguinte exemplo de saída:

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser    RemoteSigned
 LocalMachine       AllSigned

Nesse caso, a política de execução efetiva é RemoteSigned porque a política de execução para o usuário atual tem precedência sobre a política de execução definida para o computador local.

Para obter a política de execução definida para um escopo específico, use o Scope parâmetro de Get-ExecutionPolicy .

Por exemplo, o comando a seguir obtém a política de execução para o escopo CurrentUser :

Get-ExecutionPolicy -Scope CurrentUser

Alterar a política de execução

para alterar a política de execução do PowerShell no computador Windows, use o Set-ExecutionPolicy cmdlet. A alteração entra em vigor imediatamente. Você não precisa reiniciar o PowerShell.

Se você definir a política de execução para os escopos LocalMachine ou CurrentUser, a alteração será salva no registro e permanecerá em vigor até que você o altere novamente.

Se você definir a política de execução para o Process escopo, ela não será salva no registro. A política de execução é mantida até que o processo atual e todos os processos filho sejam fechados.

Observação

no Windows Vista e versões posteriores do Windows, para executar comandos que alteram a política de execução para o computador local, escopo de LocalMachine , inicie o PowerShell com a opção executar como administrador .

Para alterar sua política de execução:

Set-ExecutionPolicy -ExecutionPolicy <PolicyName>

Por exemplo:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

Para definir a política de execução em um escopo específico:

Set-ExecutionPolicy -ExecutionPolicy <PolicyName> -Scope <scope>

Por exemplo:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Um comando para alterar uma política de execução pode ter sucesso, mas ainda não alterar a política de execução efetiva.

Por exemplo, um comando que define a política de execução para o computador local pode ter sucesso, mas ser substituído pela política de execução para o usuário atual.

Remover a política de execução

Para remover a política de execução para um escopo específico, defina a política de execução como Undefined .

Por exemplo, para remover a política de execução para todos os usuários do computador local:

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope LocalMachine

Para remover a política de execução para um Scope :

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser

se nenhuma política de execução estiver definida em nenhum escopo, a política de execução efetiva será Restricted , que é o padrão para clientes de Windows.

Definir uma política diferente para uma sessão

Você pode usar o parâmetro ExecutionPolicy de pwsh.exe para definir uma política de execução para uma nova sessão do PowerShell. A política afeta apenas a sessão atual e as sessões filho.

Para definir a política de execução para uma nova sessão, inicie o PowerShell na linha de comando, como cmd.exe ou no PowerShell, e use o parâmetro ExecutionPolicy de pwsh.exe para definir a política de execução.

Por exemplo:

pwsh.exe -ExecutionPolicy AllSigned

A política de execução definida não é armazenada no Registro. Em vez disso, ele é armazenado na variável $env:PSExecutionPolicyPreference de ambiente. A variável é excluída quando você fecha a sessão na qual a política está definida. Não é possível alterar a política editando o valor da variável.

Durante a sessão, a política de execução definida para a sessão tem precedência sobre uma política de execução definida no Registro para o computador local ou usuário atual. No entanto, ele não tem precedência sobre a política de execução definida usando um Política de Grupo.

Usar Política de Grupo para gerenciar a política de execução

Você pode usar a configuração Ativar Execução de Script Política de Grupo gerenciar a política de execução de computadores em sua empresa. A Política de Grupo configuração substitui as políticas de execução definidas no PowerShell em todos os escopos.

As configurações da política Ativar Execução de Script são as seguinte:

  • Se você desabilitar Ativar Execução de Script, os scripts não são executados. Isso é equivalente à política Restricted de execução.

  • Se você habilitar Ativar Execução de Script, poderá selecionar uma política de execução. As Política de Grupo configurações são equivalentes às seguintes configurações de política de execução:

    Política de Grupo Política de execução
    Permitir todos os scripts Unrestricted
    Permitir scripts locais e scripts assinados remotos Remotesigned
    Permitir somente scripts assinados Allsigned
  • Se Ativar a Execução de Script não estiver configurado, ela não terá nenhum efeito. A política de execução definida no PowerShell é eficaz.

Os arquivos PowerShellExecutionPolicy.adm e PowerShellExecutionPolicy.admx adicionam a política Ativar Execução de Script aos nós Configuração do Computador e Configuração do Usuário no Editor do Política de Grupo nos caminhos a seguir.

Para Windows XP e Windows Server 2003:

Administrative Templates\Windows Components\Windows PowerShell

Para Windows Vista e versões posteriores do Windows:

Administrative Templates\Classic Administrative Templates\Windows Components\Windows PowerShell

As políticas definidas no nó Configuração do Computador têm precedência sobre as políticas definidas no nó Configuração do Usuário.

Para obter mais informações, confira about_Group_Policy_Settings.

Precedência da política de execução

Ao determinar a política de execução efetiva para uma sessão, o PowerShell avalia as políticas de execução na seguinte ordem de precedência:

Group Policy: MachinePolicy
Group Policy: UserPolicy
Execution Policy: Process (or pwsh.exe -ExecutionPolicy)
Execution Policy: CurrentUser
Execution Policy: LocalMachine

Gerenciar scripts assinados e não assinados

No Windows, programas como Internet Explorer e Microsoft Edge adicionam um fluxo de dados alternativo aos arquivos baixados. Isso marca o arquivo como "proveniente da Internet". Se sua política de execução do PowerShell for RemoteSigned, o PowerShell não executará scripts não assinados baixados da Internet, o que inclui programas de email e mensagens instantâneas.

Você pode assinar o script ou optar por executar um script sem sinal sem alterar a política de execução.

A partir do PowerShell 3.0, você pode usar o parâmetro Stream do cmdlet para detectar arquivos bloqueados porque eles foram Get-Item baixados da Internet. Use o Unblock-File cmdlet para desbloquear os scripts para que você possa executar no PowerShell.

Para obter mais informações, about_Signing, Get-Iteme Unblock-File.

Observação

Outros métodos de download de arquivos podem não marcar os arquivos como provenientes da Zona da Internet. Alguns exemplos incluem:

  • curl.exe
  • Invoke-RestMethod
  • Invoke-WebRequest

Política de execução Windows Server Core e Window Nano Server

Quando o PowerShell 6 é executado no Windows Server Core ou Windows Nano Server em determinadas condições, as políticas de execução podem falhar com o seguinte erro:

AuthorizationManager check failed.
At line:1 char:1
+ C:\scriptpath\scriptname.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

O PowerShell usa APIs no Windows Desktop Shell ( explorer.exe ) para validar a Zona de um arquivo de script. O Windows Shell não está disponível no Windows Server Core e Windows Nano Server.

Você também poderá receber esse erro em qualquer sistema Windows se o Windows Desktop Shell estiver indisponível ou sem resposta. Por exemplo, durante o logon, um script de logon do PowerShell pode iniciar a execução antes que o Windows Desktop esteja pronto, resultando em falha.

O uso de uma política de execução de ByPass ou AllSigned não requer uma verificação de zona que evita o problema.

Confira também

about_Environment_Variables

about_Group_Policy_Settings

about_Signing

Get-ExecutionPolicy

Get-Item

about_Pwsh

Set-ExecutionPolicy

Unblock-File