Partilhar via


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:PSExecutionPolicyPreferencede 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-ExecutionPolicynã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.