Set-ExecutionPolicy
Define as políticas de execução do PowerShell para computadores Windows.
Set-ExecutionPolicy
[-ExecutionPolicy] <ExecutionPolicy>
[[-Scope] <ExecutionPolicyScope>]
[-Force]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
O cmdlet Set-ExecutionPolicy
altera as políticas de execução do PowerShell para computadores Windows. Para obter mais informações, consulte about_Execution_Policies.
A partir do PowerShell 6.0 para computadores nã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.
Uma política de execução faz parte da estratégia de segurança do PowerShell. As políticas de execução determinam se você pode carregar arquivos de configuração, como seu perfil do PowerShell, ou executar scripts. E se os scripts devem ser assinados digitalmente antes de serem executados.
O escopo padrão do cmdlet Set-ExecutionPolicy
é LocalMachine
, o que afeta todos os que usam o computador. Para alterar a política de execução para LocalMachine
, inicie o PowerShell com Executar como Administrador.
Para exibir as políticas de execução para cada escopo, use Get-ExecutionPolicy -List
. Para ver a política de execução efetiva para sua sessão do PowerShell, use Get-ExecutionPolicy
sem parâmetros.
Este exemplo mostra como definir a política de execução para o computador local.
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser RemoteSigned
LocalMachine RemoteSigned
O cmdlet Set-ExecutionPolicy
usa o parâmetro ExecutionPolicy para especificar a política de RemoteSigned
. O parâmetro escopo especifica o valor de escopo padrão, LocalMachine
. Para exibir as configurações da política de execução, use o cmdlet Get-ExecutionPolicy
com o parâmetro lista de.
Esse comando tenta definir a política de execução do escopo LocalMachine
como Restricted
.
LocalMachine
é mais restritiva, mas não é a política efetiva porque está em conflito com uma Política de Grupo. A política de Restricted
é gravada no HKEY_LOCAL_MACHINE
do hive do Registro.
PS> Set-ExecutionPolicy -ExecutionPolicy Restricted -Scope LocalMachine
Set-ExecutionPolicy : PowerShell updated your local preference successfully, but the setting is
overridden by the Group Policy applied to your system. Due to the override, your shell will retain
its current effective execution policy of "AllSigned". Contact your Group Policy administrator for
more information. At line:1 char:20 + Set-ExecutionPolicy <<<< restricted
PS> Get-ChildItem -Path HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds
Hive: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds
Name Property
---- --------
Microsoft.PowerShell Path : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
ExecutionPolicy : Restricted
ScriptedDiagnostics ExecutionPolicy : Unrestricted
O cmdlet Set-ExecutionPolicy
usa o parâmetro ExecutionPolicy para especificar a política de Restricted
. O parâmetro escopo especifica o valor de escopo padrão, LocalMachine
. O cmdlet Get-ChildItem
usa o parâmetro Path com a unidade HKLM:
para especificar o local do registro.
Esse comando obtém o objeto de política de execução de um computador remoto e define a política no computador local.
Get-ExecutionPolicy
envia um objeto Microsoft.PowerShell.ExecutionPolicy no pipeline.
Set-ExecutionPolicy
aceita entrada de pipeline e não requer o parâmetro ExecutionPolicy.
Invoke-Command -ComputerName Server01 -ScriptBlock { Get-ExecutionPolicy } | Set-ExecutionPolicy
O cmdlet Invoke-Command
é executado no computador local e envia o ScriptBlock para o computador remoto. O parâmetro ComputerName especifica o computador remoto, Server01. O parâmetro ScriptBlock é executado Get-ExecutionPolicy
no computador remoto. O objeto Get-ExecutionPolicy
é enviado pelo pipeline para o Set-ExecutionPolicy
.
Set-ExecutionPolicy
aplica a política de execução ao escopo padrão do computador local, LocalMachine
.
Este exemplo mostra como definir uma política de execução para um escopo especificado, CurrentUser
. O escopo CurrentUser
afeta apenas o usuário que define esse escopo.
Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope CurrentUser
Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser AllSigned
LocalMachine RemoteSigned
Set-ExecutionPolicy
usa o parâmetro ExecutionPolicy para especificar a política de AllSigned
.
O parâmetro escopo especifica o CurrentUser
. Para exibir as configurações da política de execução, use o cmdlet Get-ExecutionPolicy
com o parâmetro lista de.
A política de execução efetiva para o usuário torna-se AllSigned
.
Este exemplo mostra como usar a política de execução Undefined
para remover uma política de execução para um escopo especificado.
Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser
Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine RemoteSigned
Set-ExecutionPolicy
usa o parâmetro ExecutionPolicy para especificar a política de Undefined
. O parâmetro escopo especifica o CurrentUser
. Para exibir as configurações da política de execução, use o cmdlet Get-ExecutionPolicy
com o parâmetro lista de.
O escopo do Process
afeta apenas a sessão atual do PowerShell. A política de execução é salva na variável de ambiente $Env:PSExecutionPolicyPreference
e é excluída quando a sessão é fechada.
Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope Process
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process AllSigned
CurrentUser RemoteSigned
LocalMachine RemoteSigned
O Set-ExecutionPolicy
usa o parâmetro ExecutionPolicy para especificar a política de AllSigned
. O parâmetro escopo especifica o valor Process
. Para exibir as configurações da política de execução, use o cmdlet Get-ExecutionPolicy
com o parâmetro lista de.
Este exemplo mostra como a política de execução de RemoteSigned
impede que você execute scripts sem sinal.
Uma prática recomendada é ler o código do script e verificar se ele é seguro antes de usando o cmdlet Unblock-File
. O cmdlet Unblock-File
desbloqueia scripts para que eles possam ser executados, mas não altera a política de execução.
PS> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
PS> Get-ExecutionPolicy
RemoteSigned
PS> .\Start-ActivityTracker.ps1
.\Start-ActivityTracker.ps1 : File .\Start-ActivityTracker.ps1 cannot be loaded.
The file .\Start-ActivityTracker.ps1 is not digitally signed.
The script will not execute on the system.
For more information, see about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ .\Start-ActivityTracker.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
PS> Unblock-File -Path .\Start-ActivityTracker.ps1
PS> Get-ExecutionPolicy
RemoteSigned
PS> .\Start-ActivityTracker.ps1
Task 1:
O Set-ExecutionPolicy
usa o parâmetro ExecutionPolicy para especificar a política de RemoteSigned
. A política é definida para o escopo padrão, LocalMachine
.
O cmdlet Get-ExecutionPolicy
mostra que RemoteSigned
é a política de execução efetiva para a sessão atual do PowerShell.
O Start-ActivityTracker.ps1 script is executed from the current directory. The script is blocked by
RemoteSigned' porque o script não está assinado digitalmente.
Para este exemplo, o código do script foi revisado e verificado como seguro para ser executado. O cmdlet Unblock-File
usa o parâmetro Path para desbloquear o script.
Para verificar se Unblock-File
não alterou a política de execução, Get-ExecutionPolicy
exibe a política de execução efetiva, RemoteSigned
.
O script, Start-ActivityTracker.ps1
é executado do diretório atual. O script começa a ser executado porque foi desbloqueado pelo cmdlet Unblock-File
.
Solicita a confirmação antes de executar o cmdlet.
Tipo: | SwitchParameter |
Aliases: | cf |
Cargo: | Named |
Valor padrão: | False |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
Especifica a política de execução. Se não houver Políticas de Grupo e a política de execução de cada escopo for definida como Undefined
, Restricted
se tornará a política efetiva para todos os usuários.
Os valores aceitáveis da política de execução são os seguintes:
-
AllSigned
. Requer que todos os scripts e arquivos de configuração sejam assinados por um editor confiável, incluindo scripts escritos no computador local. -
Bypass
. Nada está bloqueado e não há avisos ou avisos. -
Default
. Define a política de execução padrão.Restricted
para clientes Windows ouRemoteSigned
para servidores Windows. -
RemoteSigned
. Requer que todos os scripts e arquivos de configuração baixados da Internet sejam assinados por um editor confiável. A política de execução padrão para computadores windows server. -
Restricted
. Não carrega arquivos de configuração nem executa scripts. A política de execução padrão para computadores cliente Windows. -
Undefined
. Nenhuma política de execução é definida para o escopo. Remove uma política de execução atribuída de um escopo que não é definido por uma Política de Grupo. Se a política de execução em todos os escopos forUndefined
, a política de execução efetiva seráRestricted
. -
Unrestricted
. A partir do PowerShell 6.0, essa é a política de execução padrão para computadores não Windows e não pode ser alterada. Carrega todos os arquivos de configuração e executa todos os scripts. Se você executar um script sem sinal que foi baixado da Internet, será solicitado permissão antes que ele seja executado.
Tipo: | ExecutionPolicy |
Valores aceitos: | AllSigned, Bypass, Default, RemoteSigned, Restricted, Undefined, Unrestricted |
Cargo: | 0 |
Valor padrão: | None |
Obrigatório: | True |
Aceitar a entrada de pipeline: | True |
Aceitar caracteres curinga: | False |
Suprime todos os prompts de confirmação. Tenha cuidado com esse parâmetro para evitar resultados inesperados.
Tipo: | SwitchParameter |
Cargo: | Named |
Valor padrão: | False |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
Especifica o escopo afetado por uma política de execução. O escopo padrão é LocalMachine
.
A política de execução efetiva é determinada pela ordem de precedência da seguinte maneira:
-
MachinePolicy
- Definido por uma Política de Grupo para todos os usuários do computador -
UserPolicy
- Definido por uma Política de Grupo para o usuário atual do computador -
Process
- Afeta apenas a sessão atual do PowerShell -
LocalMachine
– Escopo padrão que afeta todos os usuários do computador -
CurrentUser
- Afeta apenas o usuário atual
O escopo do Process
afeta apenas a sessão atual do PowerShell. A política de execução é salva na variável de ambiente $Env:PSExecutionPolicyPreference
, em vez do registro. Quando a sessão do PowerShell é fechada, a variável e o valor são excluídos.
As políticas de execução para o escopo CurrentUser
são gravadas no HKEY_LOCAL_USER
do hive do Registro.
As políticas de execução para o escopo LocalMachine
são gravadas no HKEY_LOCAL_MACHINE
do hive do Registro.
Tipo: | ExecutionPolicyScope |
Valores aceitos: | CurrentUser, LocalMachine, MachinePolicy, Process, UserPolicy |
Cargo: | 1 |
Valor padrão: | LocalMachine |
Obrigatório: | False |
Aceitar a entrada de pipeline: | True |
Aceitar caracteres curinga: | False |
Mostra o que aconteceria se o cmdlet fosse executado. O cmdlet não é executado.
Tipo: | SwitchParameter |
Aliases: | wi |
Cargo: | Named |
Valor padrão: | False |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
Você pode canalizar um objeto de política de execução para este cmdlet.
Você pode canalizar uma cadeia de caracteres que contém o nome de uma política de execução para este cmdlet.
None
Esse cmdlet não retorna nenhuma saída.
Set-ExecutionPolicy
não altera os escopos MachinePolicy
e UserPolicy
porque eles são definidos pelas Políticas de Grupo.
Set-ExecutionPolicy
não substitui uma Política de Grupo, mesmo que a preferência do usuário seja mais restritiva do que a política.
Se a Política de Grupo Ativar a Execução de Script estiver habilitada para o computador ou usuário, a preferência do usuário será salva, mas não será eficaz. O PowerShell exibe uma mensagem que explica o conflito.
Comentários do PowerShell
O PowerShell é um projeto código aberto. Selecione um link para fornecer comentários: