Partilhar via


Set-ExecutionPolicy

Define as políticas de execução do PowerShell para computadores Windows.

Sintaxe

All

Set-ExecutionPolicy
    [-ExecutionPolicy] <ExecutionPolicy>
    [[-Scope] <ExecutionPolicyScope>]
    [-Force]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

Description

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 que não sejam 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, que afeta todos que usam o computador. Para alterar a política de execução do 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 eficaz para sua sessão do PowerShell, use Get-ExecutionPolicy sem parâmetros.

Exemplos

Exemplo 1: Definir uma política de execução

Este exemplo mostra como definir a diretiva 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 Scope especifica o valor de escopo padrão, LocalMachine. Para exibir as configurações de política de execução, use o cmdlet Get-ExecutionPolicy com o parâmetro List.

Exemplo 2: Definir uma política de execução que entre em conflito com uma Política de Grupo

Este comando tenta definir a política de execução do escopo LocalMachine como Restricted. LocalMachine é mais restritiva, mas não é a política eficaz porque entra em conflito com uma Diretiva de Grupo. A política de Restricted é gravada no hive do registro HKEY_LOCAL_MACHINE.

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

Exemplo 3: Aplicar a diretiva de execução de um computador remoto a um computador local

Este comando obtém o objeto de diretiva de execução de um computador remoto e define a diretiva 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 diretiva de execução ao escopo padrão do computador local, LocalMachine.

Exemplo 4: Definir o escopo de uma política de execução

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 Scope especifica o CurrentUser. Para exibir as configurações de política de execução, use o cmdlet Get-ExecutionPolicy com o parâmetro List.

A política de execução efetiva para o usuário torna-se AllSigned.

Exemplo 5: Remover a política de execução para o usuário atual

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 Scope especifica o CurrentUser. Para exibir as configurações de política de execução, use o cmdlet Get-ExecutionPolicy com o parâmetro List.

Exemplo 6: Definir a política de execução para a sessão atual do PowerShell

O escopo 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 utiliza o parâmetro ExecutionPolicy para definir a política AllSigned. O parâmetro Scope especifica o valor Process. Para exibir as configurações de política de execução, use o cmdlet Get-ExecutionPolicy com o parâmetro List.

Exemplo 7: Desbloqueie 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 que você execute scripts não assinados.

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 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 definir a política 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.

Neste exemplo, o código do script foi revisado e verificado como seguro para execução. 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 a partir do diretório atual. O script começa a ser executado porque foi desbloqueado pelo cmdlet Unblock-File.

Parâmetros

-Confirm

Solicita confirmação antes de executar o cmdlet.

Propriedades dos parâmetros

Tipo:SwitchParameter
Default value:False
Suporta carateres universais:False
NãoMostrar:False
Aliases:Cf.

Conjuntos de parâmetros

(All)
Position:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos:False

-ExecutionPolicy

Especifica a política de execução. Se não houver Diretivas de Grupo e a política de execução de cada escopo estiver 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 prompts.
  • Default. Define a política de execução padrão. Restricted para clientes Windows ou RemoteSigned 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 diretiva de execução padrão para computadores Windows Server.
  • Restricted. Não carrega arquivos de configuração nem executa scripts. A diretiva 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 Diretiva de Grupo. Se a política de execução em todos os escopos for Undefined, 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 que não sejam Windows e não pode ser alterada. Carrega todos os arquivos de configuração e executa todos os scripts. Se você executar um script não assinado que foi baixado da Internet, será solicitada permissão antes que ele seja executado.

Propriedades dos parâmetros

Tipo:ExecutionPolicy
Default value:None
Valores aceites:AllSigned, Bypass, Default, RemoteSigned, Restricted, Undefined, Unrestricted
Suporta carateres universais:False
NãoMostrar:False

Conjuntos de parâmetros

(All)
Position:0
Obrigatório:True
Valor do pipeline:True
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos:False

-Force

Suprime todos os prompts de confirmação. Tenha cuidado com este parâmetro para evitar resultados inesperados.

Propriedades dos parâmetros

Tipo:SwitchParameter
Default value:False
Suporta carateres universais:False
NãoMostrar:False

Conjuntos de parâmetros

(All)
Position:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos:False

-Scope

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 forma:

  • 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
  • LocalMachine - Escopo padrão que afeta todos os usuários do computador
  • CurrentUser - Afeta apenas o usuário atual

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.

As políticas de execução para o escopo CurrentUser são gravadas no hive do registro HKEY_LOCAL_USER.

As políticas de execução para o escopo LocalMachine são gravadas no hive do registro HKEY_LOCAL_MACHINE.

Propriedades dos parâmetros

Tipo:ExecutionPolicyScope
Default value:LocalMachine
Valores aceites:CurrentUser, LocalMachine, MachinePolicy, Process, UserPolicy
Suporta carateres universais:False
NãoMostrar:False

Conjuntos de parâmetros

(All)
Position:1
Obrigatório:False
Valor do pipeline:False
Valor do pipeline por nome de propriedade:True
Valor dos restantes argumentos:False

-WhatIf

Mostra o que aconteceria se o cmdlet fosse executado. O cmdlet não é executado.

Propriedades dos parâmetros

Tipo:SwitchParameter
Default value:False
Suporta carateres universais:False
NãoMostrar:False
Aliases:Wi

Conjuntos de parâmetros

(All)
Position:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos:False

CommonParameters

Este cmdlet suporta os parâmetros comuns: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction e -WarningVariable. Para obter mais informações, consulte about_CommonParameters.

Entradas

ExecutionPolicy

Você pode canalizar um objeto de política de execução para este cmdlet.

String

Você pode canalizar uma cadeia de caracteres que contém o nome de uma política de execução para esse cmdlet.

Saídas

None

Este cmdlet não retorna nenhuma saída.

Notas

Set-ExecutionPolicy não altera os escopos MachinePolicy e UserPolicy porque eles são definidos pelas Diretivas de Grupo.

Set-ExecutionPolicy não substitui uma Diretiva de Grupo, mesmo que a preferência do usuário seja mais restritiva do que a política.

Se o de Diretiva de Grupo Ativar Execução de Script estiver habilitado para o computador ou usuário, a preferência do usuário será salva, mas não será efetiva. O PowerShell exibe uma mensagem que explica o conflito.