about_Execution_Policies
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 sistema de segurança que restringe as ações do usuário. Por exemplo, os usuários podem facilmente bypass digitar o conteúdo do script na linha de comando quando não podem 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 que não sejam Windows, a diretiva de default execução é Unrestricted e não pode ser alterada. O Set-ExecutionPolicy
cmdlet está disponível, mas o PowerShell exibe uma mensagem de console informando que não há suporte. Embora Get-ExecutionPolicy
retorne Unrestricted em plataformas que não sejam Windows, o comportamento realmente corresponde Bypass porque essas plataformas não implementam as Zonas de Segurança do Windows.
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 antes de executar scripts de editores que você ainda não classificou 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 default execução.
- Restricted para clientes Windows.
- RemoteSigned para servidores Windows.
RemoteSigned
- A default diretiva de execução para computadores Windows Server.
- 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
Unblock-File
cmdlet. - 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
- A default diretiva de execuçã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 arquivo scope.
- Se a diretiva de execução em todos os escopos for Undefined, a diretiva de execução efetiva será Restricted para clientes Windows e RemoteSigned para Windows Server.
Unrestricted
- A default diretiva de execução para computadores que não sejam 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.
Nota
Em sistemas que não distinguem 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 diretiva de execução RemoteSigned .
Política de execução scope
Você pode definir uma política de execução que seja eficaz somente em um determinado scope.
Os valores válidos para Scope são MachinePolicy, UserPolicy, Process, CurrentUser e LocalMachine. LocalMachine é o default 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 inferior de precedência.
Para obter mais informações, consulte Set-ExecutionPolicy.
MachinePolicy
Definido por uma Diretiva de Grupo para todos os usuários do computador.
Política de Utilizador
Definido por uma Diretiva de Grupo para o usuário atual do computador.
Process
O Processscope afeta apenas a sessão atual do PowerShell. A política de execução é salva na variável
$env:PSExecutionPolicyPreference
de ambiente , em vez do arquivo de configuração. 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 no arquivo de configuração CurrentUser .
Máquina local
A diretiva de execução afeta todos os usuários no computador atual. Ele é armazenado no arquivo de configuração AllUsers .
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 à seguinte saída de exemplo:
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 Get-ExecutionPolicy
execução definida para um determinado scope, use o Scope parâmetro de .
Por exemplo, o comando a seguir obtém a política de execução para o CurrentUserscope:
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 Set-ExecutionPolicy
cmdlet. 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 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 Processscope, ela não será salva no arquivo de configuração. A política de execução é mantida até que os processos atuais process e quaisquer processos filho sejam fechados.
Nota
No Windows Vista e versões posteriores do Windows, para executar comandos que alteram a política de execução para o computador local, LocalMachinescope, 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 particular scope:
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 determinado scope, 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 scope, a política de execução efetiva será Restricted, que é a default para clientes Windows.
Definir uma política diferente para uma sessão
Você pode usar o parâmetro ExecutionPolicy de para definir uma política de execução para uma nova sessão do pwsh.exe
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 para definir a política de pwsh.exe
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 $env:PSExecutionPolicyPreference
variável 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 arquivo de configuração do computador local ou do usuário atual. No entanto, ele não tem precedência sobre a diretiva de execução definida usando uma Diretiva de Grupo.
Utilizar a Política de Grupo para Gerir a Política de Execução
Pode utilizar a definição Ativar Política de Grupo de Execução de Scripts para gerir a política de execução de computadores na sua empresa. A definição Política de Grupo substitui as políticas de execução definidas no PowerShell em todos os âmbitos.
As definições da política Ativar Execução de Scripts são as seguintes:
Se desativar Ativar a Execução de Scripts, os scripts não são executados. Isso é equivalente à política de Restricted execução.
Se ativar Ativar a Execução de Scripts, pode selecionar uma política de execução. As definições de Política de Grupo são equivalentes às seguintes definiçõ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 remotamente RemoteSigned 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 é eficaz.
Os ficheiros PowerShellExecutionPolicy.adm e PowerShellExecutionPolicy.admx adicionam a política Ativar Execução de Scripts aos nós Configuração de Computador e Configuração de Utilizador no Editor da Política de Grupo nos seguintes caminhos.
Para Windows XP e Windows Server 2003:
Administrative Templates\Windows Components\Windows PowerShell
Para o 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 Utilizador.
Para obter mais informações, veja 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: LocalMachine
Execution Policy: CurrentUser
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 Get-Item
cmdlet para detetar arquivos bloqueados porque foram baixados da Internet. Use o Unblock-File
cmdlet para desbloquear os scripts para que você possa executá-los no PowerShell.
Para obter mais informações, consulte about_Signing, Get-Item e Unblock-File.
Nota
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 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 Shell do Windows não está disponível no Windows Server Core e 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 ou AllSigned não requer uma verificação de ByPass zona que evita o problema.