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 mais informações, veja about_Execution_Policies.
A partir do PowerShell 6.0 para computadores que não sejam Windows, a diretiva de execução padrão é Unrestricted e não pode ser alterada. O Set-ExecutionPolicy cmdlet está disponível, mas o PowerShell exibe uma mensagem de console de 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 Set-ExecutionPolicy escopo padrão do cmdlet é 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 efetiva 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 Set-ExecutionPolicy cmdlet usa o parâmetro ExecutionPolicy para especificar a RemoteSigned política. 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 Get-ExecutionPolicy cmdlet com o parâmetro List .
Exemplo 2: Definir uma diretiva de execução que entre em conflito com uma Diretiva de Grupo
Este comando tenta definir a política de execução do LocalMachine escopo como Restricted.
LocalMachine é mais restritiva, mas não é a diretiva efetiva porque entra em conflito com uma Diretiva de Grupo. A Restricted política é gravada no hive HKEY_LOCAL_MACHINEdo 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 Set-ExecutionPolicy cmdlet usa o parâmetro ExecutionPolicy para especificar a Restricted política. O parâmetro Scope especifica o valor de escopo padrão, LocalMachine. O Get-ChildItem cmdlet usa o parâmetro Path com a unidade para especificar o HKLM: local do Registro.
Exemplo 3: Aplicar a diretiva de execução de um computador remoto a um computador local
Esse 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 pelo 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 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 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 CurrentUser escopo 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 AllSigned política.
O parâmetro Scope especifica o CurrentUser. Para exibir as configurações de política de execução, use o Get-ExecutionPolicy cmdlet 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 do usuário atual
Este exemplo mostra como usar a Undefined diretiva de execução para remover uma diretiva 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 Undefined política. O parâmetro Scope especifica o CurrentUser. Para exibir as configurações de política de execução, use o Get-ExecutionPolicy cmdlet com o parâmetro List .
Exemplo 6: Definir a política de execução para a sessão atual do PowerShell
O Process escopo afeta apenas a sessão atual do PowerShell. A diretiva de execução é salva na variável $env:PSExecutionPolicyPreference de ambiente 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 AllSigned política. O parâmetro Scope especifica o valor Process. Para exibir as configurações de política de execução, use o Get-ExecutionPolicy cmdlet com o parâmetro List .
Exemplo 7: Desbloquear um script para executá-lo sem alterar a política de execução
Este exemplo mostra como a RemoteSigned diretiva de execução 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 usar o Unblock-File cmdlet. O Unblock-File cmdlet 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 RemoteSigned política. A política é definida para o escopo padrão, LocalMachine.
O Get-ExecutionPolicy cmdlet 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 execução. O Unblock-File cmdlet 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 Unblock-File cmdlet.
Parâmetros
-Confirm
Solicita 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 houver Diretivas de Grupo e a diretiva de execução de cada escopo estiver definida como Undefined, ela Restricted se tornará a diretiva efetiva para todos os usuários.
Os valores de política de execução aceitáveis 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 diretiva de execução padrão.Restrictedpara clientes Windows ouRemoteSignedpara 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 servidores Windows.Restricted. Não carrega arquivos de configuração nem executa scripts. A diretiva de execução padrão para computadores cliente Windows.Undefined. Nenhuma diretiva de execução é definida para o escopo. Remove uma diretiva 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 forUndefined, a diretiva de execução efetiva seráRestricted.Unrestricted. A partir do PowerShell 6.0, essa é a diretiva de execução padrão para computadores que não sã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 não assinado que foi baixado da Internet, será solicitada 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 prompts de confirmação. Tenha cuidado com esse parâmetro para evitar resultados inesperados.
| Type: | SwitchParameter |
| Position: | Named |
| Default value: | False |
| Required: | False |
| Accept pipeline input: | False |
| Accept wildcard characters: | False |
-Scope
Especifica o escopo afetado por uma diretiva 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 Diretiva de Grupo para todos os usuários do computadorUserPolicy- Definido por uma Diretiva de Grupo para o usuário atual do computadorProcess- Afeta apenas a sessão atual do PowerShellLocalMachine- Escopo padrão que afeta todos os usuários do computadorCurrentUser- Afeta apenas o usuário atual
O Process escopo afeta apenas a sessão atual do PowerShell. A diretiva 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 diretivas de execução para o CurrentUser escopo são gravadas no hive HKEY_LOCAL_USERdo Registro.
As diretivas de execução para o LocalMachine escopo são gravadas no hive HKEY_LOCAL_MACHINEdo Registro.
| 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
Mostra o que aconteceria se o cmdlet fosse executado. 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
Você pode canalizar um objeto de política de execução para esse cmdlet.
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
Esse cmdlet não retorna nenhuma saída.
Observações
Set-ExecutionPolicy não altera os MachinePolicy escopos 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 a Diretiva de Grupo Ativar Execução de Script estiver habilitada 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.
Links Relacionados
Comentários
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulte https://aka.ms/ContentUserFeedback.
Enviar e exibir comentários de