Set-ExecutionPolicy
Define as políticas de execução do PowerShell para computadores Windows.
Syntax
Set-ExecutionPolicy
[-ExecutionPolicy] <ExecutionPolicy>
[[-Scope] <ExecutionPolicyScope>]
[-Force]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Description
O Set-ExecutionPolicy
cmdlet altera as políticas de execução do PowerShell para computadores Windows. Para obter mais informações, veja about_Execution_Policies.
Uma política de execução faz parte da estratégia de segurança do PowerShell. As políticas de execução determinam se pode carregar ficheiros de configuração, como o perfil do PowerShell ou executar scripts. Além disso, se os scripts têm de ser assinados digitalmente antes de serem executados.
O Set-ExecutionPolicy
âmbito predefinido do cmdlet é LocalMachine, que afeta todas as pessoas que utilizam o computador. Para alterar a política de execução de LocalMachine, inicie o PowerShell com Executar como Administrador.
Para apresentar as políticas de execução de cada âmbito pela ordem de precedência, utilize Get-ExecutionPolicy -List
. Para ver a política de execução efetiva da sua sessão do PowerShell, utilize Get-ExecutionPolicy
sem parâmetros.
Exemplos
Exemplo 1: Definir uma política de execução
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 Set-ExecutionPolicy
cmdlet utiliza o parâmetro ExecutionPolicy para especificar a política RemoteSigned . O parâmetro Âmbito especifica o valor de âmbito predefinido , LocalMachine. Para ver as definições da política de execução, utilize o Get-ExecutionPolicy
cmdlet com o parâmetro Lista .
Exemplo 2: Definir uma política de execução que entra em conflito com um Política de Grupo
Este comando tenta definir a política de execução do âmbito LocalMachine como Restrita. LocalMachine é mais restritiva, mas não é a política eficaz porque entra em conflito com uma Política de Grupo. A política Restrita é escrita no HKEY_LOCAL_MACHINE do registo.
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 Set-ExecutionPolicy
cmdlet utiliza o parâmetro ExecutionPolicy para especificar a política Restrita . O parâmetro Âmbito especifica o valor de âmbito predefinido , LocalMachine.
O Get-ChildItem
cmdlet utiliza o parâmetro Caminho com o fornecedor HKLM para especificar a localização do registo.
Exemplo 3: Aplicar a política de execução de um computador remoto a um computador local
Este comando obtém o objeto de política de execução a partir de um computador remoto e define a política no computador local. Get-ExecutionPolicy
envia um objeto Microsoft.PowerShell.ExecutionPolicy pelo pipeline. Set-ExecutionPolicy
aceita a entrada do pipeline e não requer o parâmetro ExecutionPolicy .
PS> Invoke-Command -ComputerName Server01 -ScriptBlock { Get-ExecutionPolicy } | Set-ExecutionPolicy
O Invoke-Command
cmdlet é 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 Get-ExecutionPolicy
objeto é enviado pelo pipeline para o Set-ExecutionPolicy
.
Set-ExecutionPolicy
aplica a política de execução ao âmbito predefinido do computador local, LocalMachine.
Exemplo 4: Definir o âmbito de uma política de execução
Este exemplo mostra como definir uma política de execução para um âmbito especificado, CurrentUser. O âmbito CurrentUser afeta apenas o utilizador que define este âmbito.
Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope CurrentUser
Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser AllSigned
LocalMachine RemoteSigned
Set-ExecutionPolicy
utiliza o parâmetro ExecutionPolicy para especificar a política AllSigned .
O parâmetro Âmbito especifica o CurrentUser. Para ver as definições da política de execução, utilize o Get-ExecutionPolicy
cmdlet com o parâmetro Lista .
A política de execução efetiva para o utilizador torna-se AllSigned.
Exemplo 5: Remover a política de execução do utilizador atual
Este exemplo mostra como utilizar a política de execução Não Definida para remover uma política de execução de um âmbito especificado.
Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser
Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine RemoteSigned
Set-ExecutionPolicy
utiliza o parâmetro ExecutionPolicy para especificar a política Não Definida .
O parâmetro Âmbito especifica o CurrentUser. Para ver as definições da política de execução, utilize o Get-ExecutionPolicy
cmdlet com o parâmetro Lista .
Exemplo 6: Definir a política de execução para a sessão atual do PowerShell
O Âmbito do processo afeta apenas a sessão atual do PowerShell. A política de execução é guardada na variável $env:PSExecutionPolicyPreference
de ambiente e é eliminada 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
utiliza o parâmetro ExecutionPolicy para especificar a política AllSigned . O parâmetro Âmbito especifica o valor Processo. Para ver as definições da política de execução, utilize o Get-ExecutionPolicy
cmdlet com o parâmetro Lista .
Exemplo 7: Desbloquear um script para executá-lo sem alterar a política de execução
Este exemplo mostra como a política de execução RemoteSigned impede a execução de scripts não assinados.
Uma melhor prática é ler o código do script e verificar se é seguro antes de utilizar o Unblock-File
cmdlet. O Unblock-File
cmdlet desbloqueia scripts para que 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
utiliza o parâmetro ExecutionPolicy para especificar a política RemoteSigned . A política está definida para o âmbito predefinido LocalMachine.
O Get-ExecutionPolicy
cmdlet mostra que RemoteSigned é a política de execução efetiva para a sessão atual do PowerShell.
O scriptStart-ActivityTracker.ps1 é executado a partir do diretório atual. O script é bloqueado por RemoteSigned porque o script não está assinado digitalmente.
Neste exemplo, o código do script foi revisto e verificado como seguro para ser executado. O Unblock-File
cmdlet utiliza o parâmetro Caminho para desbloquear o script.
Para verificar se Unblock-File
não alterou a política de execução, Get-ExecutionPolicy
apresenta a política de execução efetiva RemoteSigned.
O script ,Start-ActivityTracker.ps1 é executado a partir do diretório atual. O script começa a ser executado porque foi desbloqueado pelo Unblock-File
cmdlet.
Parâmetros
-Confirm
Solicita a sua confirmação antes de executar o cmdlet.
Type: | SwitchParameter |
Aliases: | cf |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ExecutionPolicy
Especifica a política de execução. Se não existirem Políticas de Grupo e a política de execução de cada âmbito estiver definida como Indefinida, a opção Restrito torna-se a política efetiva para todos os utilizadores.
Os valores aceitáveis da política de execução são os seguintes:
- AllSigned. Requer que todos os scripts e ficheiros de configuração sejam assinados por um fabricante fidedigno, incluindo scripts escritos no computador local.
- Ignorar. Nada está bloqueado e não existem avisos ou avisos.
- Predefinição. Define a política de execução predefinida. Restrito para clientes Windows ou RemoteSigned para servidores Windows.
- RemoteSigned. Requer que todos os scripts e ficheiros de configuração transferidos a partir da Internet sejam assinados por um fabricante fidedigno. A política de execução predefinida para computadores windows server.
- Restrito. Não carrega ficheiros de configuração nem executa scripts. A política de execução predefinida computadores cliente Windows.
- Indefinido. Nenhuma política de execução está definida para o âmbito. Remove uma política de execução atribuída de um âmbito que não é definido por um Política de Grupo. Se a política de execução em todos os âmbitos for Indefinida, a política de execução efetiva será Restrita.
- Sem restrições. Carrega todos os ficheiros de configuração e executa todos os scripts. Se executar um script não assinado transferido a partir da Internet, ser-lhe-á pedida permissão antes de ser executado.
Type: | ExecutionPolicy |
Accepted values: | AllSigned, Bypass, Default, RemoteSigned, Restricted, Undefined, Unrestricted |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Force
Suprime todos os pedidos de confirmação. Tenha cuidado com este parâmetro para evitar resultados inesperados.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Scope
Especifica o âmbito afetado por uma política de execução. O âmbito predefinido é LocalMachine.
A política de execução efetiva é determinada pela ordem de precedência da seguinte forma:
- MachinePolicy. Definido por um Política de Grupo para todos os utilizadores do computador.
- UserPolicy. Definido por um Política de Grupo para o utilizador atual do computador.
- Processo. Afeta apenas a sessão atual do PowerShell.
- CurrentUser. Afeta apenas o utilizador atual.
- LocalMachine. Âmbito predefinido que afeta todos os utilizadores do computador.
O Âmbito do processo afeta apenas a sessão atual do PowerShell. A política de execução é guardada na variável $env:PSExecutionPolicyPreference
de ambiente , em vez do registo. Quando a sessão do PowerShell é fechada, a variável e o valor são eliminados.
As políticas de execução do âmbito CurrentUser são escritas no HKEY_LOCAL_USER do hive do registo.
As políticas de execução do âmbito LocalMachine são escritas no HKEY_LOCAL_MACHINE do hive do registo.
Type: | ExecutionPolicyScope |
Accepted values: | CurrentUser, LocalMachine, MachinePolicy, Process, UserPolicy |
Position: | 1 |
Default value: | LocalMachine |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-WhatIf
Apresenta o que aconteceria mediante a execução do cmdlet. O cmdlet não é executado.
Type: | SwitchParameter |
Aliases: | wi |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Entradas
Microsoft.PowerShell.ExecutionPolicy, System.String
Pode encaminhar um objeto de política de execução ou uma cadeia que contenha o nome de uma política de execução para Set-ExecutionPolicy
.
Saídas
None
Set-ExecutionPolicy
não devolve nenhuma saída.
Notas
Set-ExecutionPolicy
não altera os âmbitos MachinePolicy e UserPolicy porque são definidos pelas Políticas de Grupo.
Set-ExecutionPolicy
não substitui um Política de Grupo, mesmo que a preferência do utilizador seja mais restritiva do que a política.
Se o Política de Grupo Ativar a Execução de Scripts estiver ativado para o computador ou utilizador, a preferência do utilizador será guardada, mas não é eficaz. O PowerShell apresenta uma mensagem que explica o conflito.