acerca_de_Políticas_de_Execução

Breve descrição

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 diretiva 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 Diretiva de Grupo para definir diretivas 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 nos arquivos de configuração do PowerShell. Você não precisa definir políticas de execução em 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 limite de segurança, é defesa em profundidade. Por exemplo, os utilizadores podem facilmente contornar uma política ao digitar o conteúdo do script na linha de comandos quando não conseguem 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.

Para mais informações sobre limites de segurança, consulte a secção de critérios de serviço de segurança das funcionalidades de segurança do PowerShell.

Em computadores que não são Windows, a política de execução padrão é Unrestricted e não pode ser alterada. O cmdlet Set-ExecutionPolicy está disponível, mas o PowerShell exibe uma mensagem de console informando que não há suporte. Apesar Get-ExecutionPolicy dos retornos Unrestricted em plataformas não Windows, o comportamento corresponde Bypass muito bem porque essas plataformas não implementam as Segurança do Windows Zones.

Políticas de execução do PowerShell

A aplicaçã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 scripts e arquivos de configuração sejam assinados por um editor confiável, incluindo scripts que você escreve no computador local.
    • Solicita ao utilizador antes de executar scripts de publicadores que ainda não tenha classificado como confiáveis ou não confiáveis.
    • Corre o risco de executar scripts assinados, mas maliciosos.
  • Bypass

    • Nada está bloqueado e não há avisos ou prompts.
    • Essa política de execução foi projetada para configurações nas quais um script do PowerShell é incorporado em um aplicativo maior ou para configurações nas quais 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.
    • RemoteSigned para clientes e servidores Windows.
  • RemoteSigned

    • A diretiva de execução padrão para computadores Windows.
    • Os scripts podem ser executados.
    • Requer uma assinatura digital de um editor confiável em scripts e arquivos de configuração baixados da Internet, o que inclui programas de email e mensagens instantâneas.
    • Não requer assinaturas digitais em scripts escritos no computador local e não baixados da Internet.
    • Executa scripts baixados da Internet e não assinados, se os scripts forem desbloqueados, como usando o cmdlet Unblock-File.
    • Corre o risco de executar scripts não assinados de outras fontes que não a Internet e scripts assinados que podem ser maliciosos.
  • Restricted

    • 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 Windows e RemoteSigned para Windows Server.
  • Unrestricted

    • A política de execução padrão para computadores que não são Windows e não pode ser alterada.
    • Scripts não assinados podem ser executados. Existe o risco de executar scripts maliciosos.
    • 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 distinguem caminhos da Convenção Universal de Nomenclatura (UNC) dos caminhos da internet, scripts identificados por um caminho UNC podem não ser autorizados a correr com a política de execução RemoteSigned .

Âmbito e precedência da política de execução

Pode definir uma política de execução que só seja eficaz num determinado âmbito. O parâmetro aceita os seguintes valores:

  • MachinePolicy - Definido por uma Diretiva de Grupo para todos os usuários do computador
  • UserPolicy - Definido por uma Diretiva de Grupo para o usuário atual do computador
  • Process - Afeta apenas a sessão atual do PowerShell
  • CurrentUser - Afeta apenas o usuário atual
  • LocalMachine - Default âmbito que afeta todos os utilizadores do computador

Observação

MachinePolicy e UserPolicy são definidas pelas Políticas de Grupo. Se tentar definir o âmbito para um destes valores, o PowerShell mostra uma mensagem de erro a indicar que o âmbito está definido por uma Estratégia de Grupo e não pode ser alterado.

Se a Política de Execução não for definida pela Política de Grupo, a política de execução efetiva é determinada pela ordem de precedência da seguinte forma:

  • Process - Prioridade máxima. O escopo Process afeta apenas a sessão atual do PowerShell. A política de execução é salva na variável $Env:PSExecutionPolicyPreferencede ambiente , em vez do registro. Quando a sessão do PowerShell é fechada, a variável e o valor são excluídos.
  • CurrentUser - Segunda prioridade máxima. A definição é armazenada no ficheiro específico powershell.config.json do utilizador.
  • LocalMachine - Prioridade mais baixa. A definição está armazenada no $PSHOME/powershell.config.json ficheiro.

Para mais informações sobre o powershell.config.json ficheiro, consulte about_PowerShell_Config.

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 cmdlet Get-ExecutionPolicy.

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 diretiva de execução efetiva é RemoteSigned porque a diretiva de execução para o usuário atual tem precedência sobre a diretiva de execução definida para o computador local.

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

Por exemplo, o comando a seguir obtém a política de execução para o âmbito do utilizador atual CurrentUser.

Get-ExecutionPolicy -Scope CurrentUser

Alterar a política de execução

Para alterar a política de execução do PowerShell em seu computador Windows, use o cmdlet Set-ExecutionPolicy. A alteração entra em vigor imediatamente. Não é necessário reiniciar o PowerShell.

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

Se você definir a política de execução para o escopo Process, ela não será salva no arquivo de configuração. 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 nas versões posteriores do Windows, para executar comandos que alteram a diretiva de execução para o computador local: escopo 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 ser bem-sucedido, mas ainda não alterar a política de execução efetiva.

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

Remover a política de execução

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

Por exemplo, para remover a diretiva 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 de um Scope:

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser

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

Definir uma política diferente para uma sessão

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 filhas.

Para definir a política de execução para uma nova sessão, inicie o PowerShell na linha de comando, como cmd.exe ou a partir do 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 arquivo de configuração. Em vez disso, ele é armazenado na variável de ambiente $Env:PSExecutionPolicyPreference. A variável é excluída quando você fecha a sessão na qual a política está definida. Não podes 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 prioridade sobre uma política de execução definida no ficheiro de configuração para o computador local ou utilizador atual. No entanto, ele não tem precedência sobre a diretiva de execução definida usando uma Diretiva de Grupo.

Usar a Diretiva de Grupo para gerenciar a diretiva de execução

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

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

  • Se desativar Ativar a Execução de Scripts, os scripts não são executados. Isso é equivalente à política de execução Restricted.

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

    Política de Grupo Política de Execução
    Permitir todos os scripts Unrestricted
    Permitir scripts locais e scripts assinados remotamente Assinado remotamente
    Permitir apenas scripts assinados AllSigned
  • Se a opção Ativar Execução de Scripts não estiver configurada, não tem qualquer efeito. A política de execução definida no PowerShell é efetiva.

Os PowerShellCoreExecutionPolicy.adm ficheiros e PowerShellCoreExecutionPolicy.admx adicionam a política de Ativação de Execução de Scripts aos nós de Configuração do Computador e Configuração do Utilizador no Editor de Políticas de Grupo pelo seguinte caminho:

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, consulte about_Group_Policy_Settings.

Gerenciar scripts assinados e não assinados

No Windows, programas como o Internet Explorer e o Microsoft Edge adicionam um fluxo de dados alternativo aos arquivos baixados. Isso marca o arquivo como "vindo 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 não assinado sem alterar a política de execução.

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

Para obter mais informações, consulte 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. Eis alguns exemplos:

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

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

Quando o PowerShell 6 é executado no Windows Server Core ou no Windows Nano Server sob 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 Shell da Área de Trabalho do Windows (explorer.exe) para validar a Zona de um arquivo de script. O Windows Shell não está disponível no Windows Server Core nem no Windows Nano Server.

Você também pode obter esse erro em qualquer sistema Windows se o Windows Desktop Shell não estiver disponível ou não responder. Por exemplo, durante o logon, um script de logon do PowerShell pode iniciar a execução antes que a Área de Trabalho do Windows esteja pronta, resultando em falha.

Usar uma política de execução de ByPass ou AllSigned não requer uma verificação de Zona, o que evita o problema.

Consulte também