Set-ExecutionPolicy
Hiermee stelt u het PowerShell-uitvoeringsbeleid voor Windows-computers in.
Set-ExecutionPolicy
[-ExecutionPolicy] <ExecutionPolicy>
[[-Scope] <ExecutionPolicyScope>]
[-Force]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
De Set-ExecutionPolicy
-cmdlet wijzigt het PowerShell-uitvoeringsbeleid voor Windows-computers. Zie about_Execution_Policiesvoor meer informatie.
Vanaf PowerShell 6.0 voor niet-Windows-computers is het standaarduitvoeringsbeleid Unrestricted
en kan het 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 PowerShell-beveiligingsstrategie. 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 standaardbereik van de Set-ExecutionPolicy
-cmdlet is LocalMachine
, wat van invloed is op iedereen die de computer gebruikt. Als u het uitvoeringsbeleid voor LocalMachine
wilt wijzigen, start u PowerShell met Als administrator uitvoeren.
Gebruik Get-ExecutionPolicy -List
om het uitvoeringsbeleid voor elk bereik weer te geven. Als u het effectieve uitvoeringsbeleid voor uw PowerShell-sessie wilt zien, gebruikt u Get-ExecutionPolicy
zonder parameters.
In dit voorbeeld ziet u hoe u het uitvoeringsbeleid instelt voor de lokale computer.
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser RemoteSigned
LocalMachine RemoteSigned
De cmdlet Set-ExecutionPolicy
gebruikt de parameter ExecutionPolicy om het RemoteSigned
-beleid op te geven. De parameter Bereik specificeert de standaardbereikwaarde, LocalMachine
. Als u de instellingen voor het uitvoeringsbeleid wilt weergeven, gebruikt u de cmdlet Get-ExecutionPolicy
met de parameter List.
Met deze opdracht wordt geprobeerd het uitvoeringsbeleid van het LocalMachine
bereik in te stellen op Restricted
.
LocalMachine
is restrictiever, maar niet het effectieve beleid omdat het conflicteert met een groepsbeleid. Het Restricted
-beleid wordt naar het register hive-HKEY_LOCAL_MACHINE
geschreven.
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 cmdlet Set-ExecutionPolicy
gebruikt de parameter ExecutionPolicy om het Restricted
-beleid op te geven. De parameter Bereik specificeert de standaardbereikwaarde, LocalMachine
. De Get-ChildItem
-cmdlet gebruikt de parameter Path met het station HKLM:
om de registerlocatie op te geven.
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 de ScriptBlock naar de externe computer. De ComputerName parameter geeft de externe computer, Server01. Met de parameter ScriptBlock wordt Get-ExecutionPolicy
uitgevoerd op de externe computer. Het Get-ExecutionPolicy
-object wordt naar de Set-ExecutionPolicy
verzonden.
Set-ExecutionPolicy
past het uitvoeringsbeleid toe op het standaardbereik van de lokale computer, LocalMachine
.
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.
De parameter Bereik geeft de CurrentUser
op. Als u de instellingen voor het uitvoeringsbeleid wilt weergeven, gebruikt u de cmdlet Get-ExecutionPolicy
met de parameter List.
Het effectieve uitvoeringsbeleid voor de gebruiker wordt AllSigned
.
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. De parameter Bereik geeft de CurrentUser
op. Als u de instellingen voor het uitvoeringsbeleid wilt weergeven, gebruikt u de cmdlet Get-ExecutionPolicy
met de parameter List.
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. De parameter Bereik geeft de waarde Process
op. Als u de instellingen voor het uitvoeringsbeleid wilt weergeven, gebruikt u de cmdlet Get-ExecutionPolicy
met de parameter List.
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 het veilig is voordat de Unblock-File
cmdlet gebruikt. De Unblock-File
cmdlet deblokkert 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 geeft aan dat RemoteSigned
het effectieve uitvoeringsbeleid is voor de huidige PowerShell-sessie.
Het Start-ActivityTracker.ps1
script wordt uitgevoerd vanuit de huidige map. Het script wordt geblokkeerd door RemoteSigned
omdat het script niet digitaal is ondertekend.
In dit voorbeeld is de code van het script gecontroleerd en geverifieerd als veilig uit te voeren. De cmdlet Unblock-File
maakt gebruik van de parameter Path om het script te deblokkeren.
Als u wilt controleren of Unblock-File
het uitvoeringsbeleid niet heeft gewijzigd, Get-ExecutionPolicy
het effectieve uitvoeringsbeleid weergeeft, 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.
U wordt gevraagd om bevestiging voordat u de cmdlet uitvoert.
Type: | SwitchParameter |
Aliassen: | cf |
Position: | Named |
Default value: | False |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
Hiermee geeft u het uitvoeringsbeleid. Als er geen groepsbeleid is en het uitvoeringsbeleid van elk bereik is ingesteld op Undefined
, wordt Restricted
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 aanwijzingen. -
Default
. Hiermee stelt u het standaarduitvoeringsbeleid in.Restricted
voor Windows-clients ofRemoteSigned
voor Windows-servers. -
RemoteSigned
. Vereist dat alle scripts en configuratiebestanden die van internet zijn gedownload, zijn ondertekend door een vertrouwde uitgever. Het standaarduitvoeringsbeleid voor Windows-servercomputers. -
Restricted
. Laadt geen configuratiebestanden of voert 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 bereikenUndefined
is, wordt het effectieve uitvoeringsbeleidRestricted
. -
Unrestricted
. Vanaf PowerShell 6.0 is dit het standaarduitvoeringsbeleid voor niet-Windows-computers en kan niet worden gewijzigd. Laadt alle configuratiebestanden en voert alle scripts uit. Als u een niet-ondertekend script uitvoert dat is gedownload van internet, wordt u gevraagd om toestemming voordat het wordt uitgevoerd.
Type: | ExecutionPolicy |
Geaccepteerde waarden: | AllSigned, Bypass, Default, RemoteSigned, Restricted, Undefined, Unrestricted |
Position: | 0 |
Default value: | None |
Vereist: | True |
Pijplijninvoer accepteren: | True |
Jokertekens accepteren: | False |
Onderdrukt alle bevestigingsprompts. Wees voorzichtig met deze parameter om onverwachte resultaten te voorkomen.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
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
- Instellen door een groepsbeleid voor de huidige gebruiker van de computer -
Process
: is alleen van invloed op de huidige PowerShell-sessie -
LocalMachine
: standaardbereik dat van invloed is op alle gebruikers van de computer -
CurrentUser
: is 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:PSExecutionPolicyPreference
in plaats van het register. Wanneer de PowerShell-sessie is gesloten, worden de variabele en waarde verwijderd.
Uitvoeringsbeleid voor het CurrentUser
-bereik wordt naar het register-hive-HKEY_LOCAL_USER
geschreven.
Uitvoeringsbeleid voor het LocalMachine
-bereik wordt naar het register-hive-HKEY_LOCAL_MACHINE
geschreven.
Type: | ExecutionPolicyScope |
Geaccepteerde waarden: | CurrentUser, LocalMachine, MachinePolicy, Process, UserPolicy |
Position: | 1 |
Default value: | LocalMachine |
Vereist: | False |
Pijplijninvoer accepteren: | True |
Jokertekens accepteren: | False |
Toont wat er zou gebeuren als de cmdlet wordt uitgevoerd. De cmdlet wordt niet uitgevoerd.
Type: | SwitchParameter |
Aliassen: | wi |
Position: | Named |
Default value: | False |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
U kunt een uitvoeringsbeleidsobject doorsluisen naar deze cmdlet.
U kunt een tekenreeks met de naam van een uitvoeringsbeleid doorsluisen naar deze cmdlet.
None
Deze cmdlet retourneert geen uitvoer.
Set-ExecutionPolicy
wijzigt de MachinePolicy
- en UserPolicy
bereiken niet omdat deze zijn ingesteld door groepsbeleid.
Set-ExecutionPolicy
overschrijft geen groepsbeleid, zelfs niet als de gebruikersvoorkeur meer beperkend is dan het beleid.
Als het groepsbeleid Scriptuitvoering inschakelen is ingeschakeld voor de computer of gebruiker, wordt de gebruikersvoorkeur opgeslagen, maar is deze niet effectief. PowerShell geeft een bericht weer waarin het conflict wordt uitgelegd.
PowerShell-feedback
PowerShell is een open source project. Selecteer een koppeling om feedback te geven: