Delen via


Set-ExecutionPolicy

Hiermee stelt u het PowerShell-uitvoeringsbeleid voor Windows-computers in.

Syntax

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

Description

De Set-ExecutionPolicy cmdlet wijzigt het PowerShell-uitvoeringsbeleid voor Windows-computers. Zie about_Execution_Policies voor meer informatie.

Vanaf PowerShell 6.0 voor niet-Windows-computers is Unrestricted en kan het standaarduitvoeringsbeleid niet worden gewijzigd. De Set-ExecutionPolicy cmdlet is beschikbaar, maar PowerShell geeft een consolebericht weer dat deze niet wordt ondersteund.

Een uitvoeringsbeleid maakt deel uit van de Beveiligingsstrategie van PowerShell. Uitvoeringsbeleid bepaalt of u configuratiebestanden, zoals uw PowerShell-profiel, kunt laden of scripts kunt uitvoeren. En of scripts digitaal moeten worden ondertekend voordat ze worden uitgevoerd.

Het Set-ExecutionPolicy standaardbereik van de cmdlet is , dat van invloed is LocalMachineop iedereen die de computer gebruikt. Als u het uitvoeringsbeleid voor LocalMachinewilt wijzigen, start u PowerShell met Als administrator uitvoeren.

Gebruik om het uitvoeringsbeleid voor elk bereik weer te geven Get-ExecutionPolicy -List. Als u het effectieve uitvoeringsbeleid voor uw PowerShell-sessie wilt zien, gebruikt u Get-ExecutionPolicy zonder parameters.

Voorbeelden

Voorbeeld 1: Een uitvoeringsbeleid instellen

In dit voorbeeld ziet u hoe u het uitvoeringsbeleid voor de lokale computer instelt.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
Get-ExecutionPolicy -List

Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser    RemoteSigned
 LocalMachine    RemoteSigned

De Set-ExecutionPolicy cmdlet gebruikt de parameter ExecutionPolicy om het RemoteSigned beleid op te geven. Met de parameter Bereik wordt de standaardwaarde voor het bereik opgegeven, LocalMachine. Als u de instellingen voor het uitvoeringsbeleid wilt weergeven, gebruikt u de Get-ExecutionPolicy cmdlet met de parameter List .

Voorbeeld 2: Een uitvoeringsbeleid instellen dat conflicteert met een groepsbeleid

Met deze opdracht wordt geprobeerd het uitvoeringsbeleid van het LocalMachine bereik in te stellen op Restricted. LocalMachineis restrictiever, maar is niet het effectieve beleid omdat het conflicteert met een groepsbeleid. Het Restricted beleid wordt geschreven naar de registercomponent 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

De Set-ExecutionPolicy cmdlet gebruikt de parameter ExecutionPolicy om het Restricted beleid op te geven. Met de parameter Bereik wordt de standaardwaarde voor het bereik opgegeven, LocalMachine. De Get-ChildItem cmdlet gebruikt de parameter Path met het station om de HKLM: registerlocatie op te geven.

Voorbeeld 3: Het uitvoeringsbeleid van een externe computer toepassen op een lokale computer

Met deze opdracht wordt het uitvoeringsbeleidsobject opgehaald van een externe computer en wordt het beleid ingesteld op de lokale computer. Get-ExecutionPolicy verzendt een Microsoft.PowerShell.ExecutionPolicy-object in de pijplijn. Set-ExecutionPolicy accepteert pijplijninvoer en vereist niet de parameter ExecutionPolicy .

Invoke-Command -ComputerName Server01 -ScriptBlock { Get-ExecutionPolicy } | Set-ExecutionPolicy

De Invoke-Command cmdlet wordt uitgevoerd op de lokale computer en verzendt het ScriptBlock naar de externe computer. De ComputerName parameter geeft de externe computer, Server01. De parameter ScriptBlock wordt uitgevoerd Get-ExecutionPolicy op de externe computer. Het Get-ExecutionPolicy object wordt via de pijplijn naar de Set-ExecutionPolicyverzonden. Set-ExecutionPolicy past het uitvoeringsbeleid toe op het standaardbereik van de lokale computer, LocalMachine.

Voorbeeld 4: Het bereik voor een uitvoeringsbeleid instellen

In dit voorbeeld ziet u hoe u een uitvoeringsbeleid instelt voor een opgegeven bereik, CurrentUser. Het CurrentUser bereik is alleen van invloed op de gebruiker die dit bereik instelt.

Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope CurrentUser
Get-ExecutionPolicy -List

Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       AllSigned
 LocalMachine    RemoteSigned

Set-ExecutionPolicy gebruikt de parameter ExecutionPolicy om het AllSigned beleid op te geven. Met de parameter Bereik wordt de CurrentUseropgegeven. Als u de instellingen voor het uitvoeringsbeleid wilt weergeven, gebruikt u de Get-ExecutionPolicy cmdlet met de parameter List .

Het effectieve uitvoeringsbeleid voor de gebruiker wordt AllSigned.

Voorbeeld 5: Het uitvoeringsbeleid voor de huidige gebruiker verwijderen

In dit voorbeeld ziet u hoe u het Undefined uitvoeringsbeleid gebruikt om een uitvoeringsbeleid voor een opgegeven bereik te verwijderen.

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser
Get-ExecutionPolicy -List

Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine    RemoteSigned

Set-ExecutionPolicy gebruikt de parameter ExecutionPolicy om het Undefined beleid op te geven. Met de parameter Bereik wordt de CurrentUseropgegeven. Als u de instellingen voor het uitvoeringsbeleid wilt weergeven, gebruikt u de Get-ExecutionPolicy cmdlet met de parameter List .

Voorbeeld 6: Het uitvoeringsbeleid voor de huidige PowerShell-sessie instellen

Het Process bereik is alleen van invloed op de huidige PowerShell-sessie. Het uitvoeringsbeleid wordt opgeslagen in de omgevingsvariabele $env:PSExecutionPolicyPreference en wordt verwijderd wanneer de sessie wordt gesloten.

Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope Process

Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       AllSigned
  CurrentUser    RemoteSigned
 LocalMachine    RemoteSigned

De Set-ExecutionPolicy gebruikt de parameter ExecutionPolicy om het AllSigned beleid op te geven. Met de parameter Bereik wordt de waarde Processopgegeven. Als u de instellingen voor het uitvoeringsbeleid wilt weergeven, gebruikt u de Get-ExecutionPolicy cmdlet met de parameter List .

Voorbeeld 7: Een script deblokkeren om het uit te voeren zonder het uitvoeringsbeleid te wijzigen

In dit voorbeeld ziet u hoe het RemoteSigned uitvoeringsbeleid voorkomt dat u niet-ondertekende scripts uitvoert.

Een best practice is om de code van het script te lezen en te controleren of deze veilig is voordat u de Unblock-File cmdlet gebruikt. De Unblock-File cmdlet deblokkeert scripts zodat ze kunnen worden uitgevoerd, maar wijzigt het uitvoeringsbeleid niet.

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:

De Set-ExecutionPolicy gebruikt de parameter ExecutionPolicy om het RemoteSigned beleid op te geven. Het beleid is ingesteld voor het standaardbereik, LocalMachine.

De Get-ExecutionPolicy cmdlet laat zien dat RemoteSigned het effectieve uitvoeringsbeleid voor de huidige PowerShell-sessie is.

RemoteSigned Start-ActivityTracker.ps1 script is executed from the current directory. The script is blocked by ' omdat het script niet digitaal is ondertekend.

In dit voorbeeld is de code van het script gecontroleerd en geverifieerd als veilig om uit te voeren. De Unblock-File cmdlet gebruikt de parameter Path om de blokkering van het script op te heffen.

Als u wilt controleren of Unblock-File het uitvoeringsbeleid niet is gewijzigd, Get-ExecutionPolicy wordt het effectieve uitvoeringsbeleid weergegeven, RemoteSigned.

Het script Start-ActivityTracker.ps1 wordt uitgevoerd vanuit de huidige map. Het script wordt uitgevoerd omdat het is gedeblokkeerd door de Unblock-File cmdlet.

Parameters

-Confirm

Hiermee wordt u gevraagd om bevestiging voordat u de cmdlet uitvoert.

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ExecutionPolicy

Hiermee geeft u het uitvoeringsbeleid. Als er geen groepsbeleid is en het uitvoeringsbeleid van elk bereik is ingesteld op Undefined, Restricted wordt het effectieve beleid voor alle gebruikers.

De acceptabele waarden voor het uitvoeringsbeleid zijn als volgt:

  • AllSigned. Vereist dat alle scripts en configuratiebestanden zijn ondertekend door een vertrouwde uitgever, inclusief scripts die op de lokale computer zijn geschreven.
  • Bypass. Er wordt niets geblokkeerd en er zijn geen waarschuwingen of prompts.
  • Default. Hiermee stelt u het standaarduitvoeringsbeleid in. Restricted voor Windows-clients of RemoteSigned voor Windows-servers.
  • RemoteSigned. Vereist dat alle scripts en configuratiebestanden die van internet worden gedownload, zijn ondertekend door een vertrouwde uitgever. Het standaarduitvoeringsbeleid voor Windows-servercomputers.
  • Restricted. Laadt geen configuratiebestanden en voert geen scripts uit. Het standaarduitvoeringsbeleid voor Windows-clientcomputers.
  • Undefined. Er is geen uitvoeringsbeleid ingesteld voor het bereik. Hiermee verwijdert u een toegewezen uitvoeringsbeleid uit een bereik dat niet is ingesteld door een groepsbeleid. Als het uitvoeringsbeleid in alle bereiken is, is UndefinedRestrictedhet effectieve uitvoeringsbeleid .
  • Unrestricted. Vanaf PowerShell 6.0 is dit het standaarduitvoeringsbeleid voor niet-Windows-computers en kan dit niet worden gewijzigd. Hiermee worden alle configuratiebestanden geladen en worden alle scripts uitgevoerd. Als u een niet-ondertekend script uitvoert dat is gedownload van internet, wordt u om toestemming gevraagd voordat het wordt uitgevoerd.
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

Onderdrukt alle bevestigingsprompts. Wees voorzichtig met deze parameter om onverwachte resultaten te voorkomen.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Scope

Hiermee geeft u het bereik op dat wordt beïnvloed door een uitvoeringsbeleid. Het standaardbereik is LocalMachine.

Het effectieve uitvoeringsbeleid wordt als volgt bepaald door de volgorde van prioriteit:

  • MachinePolicy- Ingesteld door een groepsbeleid voor alle gebruikers van de computer
  • UserPolicy- Ingesteld door een groepsbeleid voor de huidige gebruiker van de computer
  • Process - Alleen van invloed op de huidige PowerShell-sessie
  • LocalMachine - Standaardbereik dat van invloed is op alle gebruikers van de computer
  • CurrentUser - Alleen van invloed op de huidige gebruiker

Het Process bereik is alleen van invloed op de huidige PowerShell-sessie. Het uitvoeringsbeleid wordt opgeslagen in de omgevingsvariabele $env:PSExecutionPolicyPreferencein plaats van in het register. Wanneer de PowerShell-sessie wordt gesloten, worden de variabele en waarde verwijderd.

Uitvoeringsbeleid voor het CurrentUser bereik wordt naar de registercomponent HKEY_LOCAL_USERgeschreven.

Uitvoeringsbeleid voor het LocalMachine bereik wordt naar de registercomponent HKEY_LOCAL_MACHINEgeschreven.

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

Hiermee wordt weergegeven wat er zou gebeuren als u de cmdlet uitvoert. De cmdlet wordt niet uitgevoerd.

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Invoerwaarden

ExecutionPolicy

U kunt een uitvoeringsbeleidsobject doorsluisen naar deze cmdlet.

String

U kunt een tekenreeks met de naam van een uitvoeringsbeleid doorspezen naar deze cmdlet.

Uitvoerwaarden

None

Deze cmdlet retourneert geen uitvoer.

Notities

Set-ExecutionPolicy wijzigt de MachinePolicy bereiken en UserPolicy niet omdat deze zijn ingesteld door groepsbeleid.

Set-ExecutionPolicyoverschrijft een groepsbeleid niet, zelfs niet als de gebruikersvoorkeur restrictiever is dan het beleid.

Als de groepsbeleid Scriptuitvoering inschakelen is ingeschakeld voor de computer of gebruiker, wordt de gebruikersvoorkeur opgeslagen, maar niet effectief. PowerShell geeft een bericht weer waarin het conflict wordt uitgelegd.