about_Execution_Policies

Korte beschrijving

Beschrijft het PowerShell-uitvoeringsbeleid en legt uit hoe u deze beheert.

Lange beschrijving

Het uitvoeringsbeleid van PowerShell is een veiligheidsfunctie waarmee de voorwaarden worden bepaald waaronder PowerShell configuratiebestanden laadt en scripts uitvoert. Deze functie helpt voorkomen dat schadelijke scripts worden uitgevoerd.

Op een Windows-computer kunt u een uitvoeringsbeleid instellen voor de lokale computer, voor de huidige gebruiker of voor een bepaalde sessie. U kunt ook een groepsbeleid instelling gebruiken om uitvoeringsbeleid in te stellen voor computers en gebruikers.

Uitvoeringsbeleid voor de lokale computer en de huidige gebruiker worden opgeslagen in het register. U hoeft geen uitvoeringsbeleid in te stellen in uw PowerShell-profiel. Het uitvoeringsbeleid voor een bepaalde sessie wordt alleen opgeslagen in het geheugen en gaat verloren wanneer de sessie wordt gesloten.

Het uitvoeringsbeleid is geen beveiligingssysteem waarmee gebruikersacties worden beperkt. Gebruikers kunnen bijvoorbeeld eenvoudig een beleid omzeilen door de inhoud van het script op de opdrachtregel te typen wanneer ze geen script kunnen uitvoeren. In plaats daarvan helpt het uitvoeringsbeleid gebruikers om basisregels in te stellen en te voorkomen dat ze ze onbedoeld schenden.

Op niet-Windows-computers is het standaarduitvoeringsbeleid wel Unrestricted en kan niet worden gewijzigd. De Set-ExecutionPolicy cmdlet is beschikbaar, maar PowerShell geeft een consolebericht weer dat deze niet wordt ondersteund. Hoewel Get-ExecutionPolicy het gedrag op niet-Windows-platforms wordt geretourneerdUnrestricted, komt het gedrag echt overeen Bypass omdat deze platforms de Windows-beveiliging Zones niet implementeren.

PowerShell-uitvoeringsbeleid

Het afdwingen van dit beleid vindt alleen plaats op Windows-platforms. Het PowerShell-uitvoeringsbeleid is als volgt:

AllSigned

  • Scripts kunnen worden uitgevoerd.
  • Vereist dat alle scripts en configuratiebestanden worden ondertekend door een vertrouwde uitgever, inclusief scripts die u op de lokale computer schrijft.
  • Hiermee wordt u gevraagd voordat u scripts uitvoert van uitgevers die u nog niet hebt geclassificeerd als vertrouwd of niet-vertrouwd.
  • Risico's die worden uitgevoerd als ondertekend, maar kwaadwillende scripts.

Bypass

  • Er wordt niets geblokkeerd en er zijn geen waarschuwingen of prompts.
  • Dit uitvoeringsbeleid is ontworpen voor configuraties waarin een PowerShell-script is ingebouwd in een grotere toepassing of voor configuraties waarin PowerShell de basis vormt voor een programma dat een eigen beveiligingsmodel heeft.

Default

  • Hiermee stelt u het standaarduitvoeringsbeleid in.
  • Restricted voor Windows-clients.
  • RemoteSigned voor Windows-servers.

RemoteSigned

  • Het standaarduitvoeringsbeleid voor Windows-servercomputers.
  • Scripts kunnen worden uitgevoerd.
  • Vereist een digitale handtekening van een vertrouwde uitgever op scripts en configuratiebestanden die zijn gedownload van internet, waaronder programma's voor e-mail en chatberichten.
  • Er zijn geen digitale handtekeningen vereist voor scripts die zijn geschreven op de lokale computer en niet zijn gedownload van internet.
  • Hiermee worden scripts uitgevoerd die zijn gedownload van internet en niet zijn ondertekend, als de scripts zijn gedeblokkeerd, zoals met behulp van de Unblock-File cmdlet.
  • Risico's bij het uitvoeren van niet-ondertekende scripts van andere bronnen dan internet en ondertekende scripts die schadelijk kunnen zijn.

Restricted

  • Het standaarduitvoeringsbeleid voor Windows-clientcomputers.
  • Hiermee staat u afzonderlijke opdrachten toe, maar staat u geen scripts toe.
  • Hiermee voorkomt u dat alle scriptbestanden worden uitgevoerd, inclusief opmaak- en configuratiebestanden (.ps1xml), modulescriptbestanden (.psm1) en PowerShell-profielen (.ps1).

Undefined

  • Er is geen uitvoeringsbeleid ingesteld in het huidige bereik.
  • Als het uitvoeringsbeleid in alle bereiken is Undefined, is Restricted het effectieve uitvoeringsbeleid voor Windows-clients en RemoteSigned voor Windows Server.

Unrestricted

  • Het standaarduitvoeringsbeleid voor niet-Windows-computers en kan niet worden gewijzigd.
  • Niet-ondertekende scripts kunnen worden uitgevoerd. Er is een risico op het uitvoeren van schadelijke scripts.
  • Waarschuwt de gebruiker voordat scripts en configuratiebestanden worden uitgevoerd die niet afkomstig zijn van de lokale intranetzone.

Notitie

Op systemen die geen UNC-paden (Universal Naming Convention) onderscheiden van internetpaden, kunnen scripts die worden geïdentificeerd door een UNC-pad mogelijk niet worden uitgevoerd met het RemoteSigned-uitvoeringsbeleid .

Bereik van uitvoeringsbeleid

U kunt een uitvoeringsbeleid instellen dat alleen van kracht is in een bepaald bereik.

De geldige waarden zijn ScopeMachinePolicy: UserPolicy, ProcessCurrentUser en LocalMachine. LocalMachine is de standaardinstelling bij het instellen van een uitvoeringsbeleid.

De Scope waarden worden weergegeven in volgorde van prioriteit. Het beleid dat voorrang krijgt, is effectief in de huidige sessie, zelfs als een meer beperkend beleid is ingesteld op een lager prioriteitsniveau.

Zie Set-ExecutionPolicy voor meer informatie.

MachinePolicy

Ingesteld door een groepsbeleid voor alle gebruikers van de computer.

UserPolicy

Ingesteld door een groepsbeleid voor de huidige gebruiker van de computer.

Process

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 wordt gesloten, worden de variabele en waarde verwijderd.

CurrentUser

Het uitvoeringsbeleid is alleen van invloed op de huidige gebruiker. Deze wordt opgeslagen in de HKEY_CURRENT_USER registersubsleutel.

LocalMachine

Het uitvoeringsbeleid is van invloed op alle gebruikers op de huidige computer. Deze wordt opgeslagen in de HKEY_LOCAL_MACHINE registersubsleutel.

Het uitvoeringsbeleid beheren met PowerShell

Gebruik de Get-ExecutionPolicy cmdlet om het effectieve uitvoeringsbeleid voor de huidige PowerShell-sessie op te halen.

De volgende opdracht haalt het effectieve uitvoeringsbeleid op:

Get-ExecutionPolicy

Om alle uitvoeringsbeleidsregels op te halen die van invloed zijn op de huidige sessie en deze weer te geven in volgorde van prioriteit:

Get-ExecutionPolicy -List

Het resultaat ziet er ongeveer uit als in de volgende voorbeelduitvoer:

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

In dit geval is het effectieve uitvoeringsbeleid RemoteSigned omdat het uitvoeringsbeleid voor de huidige gebruiker voorrang heeft op het uitvoeringsbeleid dat is ingesteld voor de lokale computer.

Als u de uitvoeringsbeleidsset voor een bepaald bereik wilt ophalen, gebruikt u de Scope parameter van Get-ExecutionPolicy.

Met de volgende opdracht wordt bijvoorbeeld het uitvoeringsbeleid voor het bereik CurrentUser weergegeven:

Get-ExecutionPolicy -Scope CurrentUser

Het uitvoeringsbeleid wijzigen

Als u het PowerShell-uitvoeringsbeleid op uw Windows-computer wilt wijzigen, gebruikt u de Set-ExecutionPolicy cmdlet. De wijziging is onmiddellijk van kracht. U hoeft PowerShell niet opnieuw op te starten.

Als u het uitvoeringsbeleid instelt voor de scopes LocalMachine of currentuser, wordt de wijziging opgeslagen in het register en blijft deze van kracht totdat u het opnieuw wijzigt.

Als u het uitvoeringsbeleid voor het Process bereik instelt, wordt het niet opgeslagen in het register. Het uitvoeringsbeleid wordt bewaard totdat het huidige proces en eventuele onderliggende processen worden gesloten.

Notitie

Als u in Windows Vista en latere versies van Windows opdrachten wilt uitvoeren die het uitvoeringsbeleid voor de lokale computer wijzigen, start u PowerShell met de optie Uitvoeren als administrator .

Uw uitvoeringsbeleid wijzigen:

Set-ExecutionPolicy -ExecutionPolicy <PolicyName>

Bijvoorbeeld:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

Het uitvoeringsbeleid instellen in een bepaald bereik:

Set-ExecutionPolicy -ExecutionPolicy <PolicyName> -Scope <scope>

Bijvoorbeeld:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Een opdracht om een uitvoeringsbeleid te wijzigen, kan slagen, maar nog steeds niet het effectieve uitvoeringsbeleid wijzigen.

Een opdracht waarmee het uitvoeringsbeleid voor de lokale computer wordt ingesteld, kan bijvoorbeeld slagen, maar worden overschreven door het uitvoeringsbeleid voor de huidige gebruiker.

Het uitvoeringsbeleid verwijderen

Als u het uitvoeringsbeleid voor een bepaald bereik wilt verwijderen, stelt u het uitvoeringsbeleid in op Undefined.

Als u bijvoorbeeld het uitvoeringsbeleid voor alle gebruikers van de lokale computer wilt verwijderen:

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope LocalMachine

Het uitvoeringsbeleid voor een Scope:

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser

Als er geen uitvoeringsbeleid is ingesteld in een bereik, is Restrictedhet effectieve uitvoeringsbeleid, wat de standaardinstelling is voor Windows-clients.

Een ander beleid instellen voor één sessie

U kunt de parameter ExecutionPolicy gebruiken om pwsh.exe een uitvoeringsbeleid in te stellen voor een nieuwe PowerShell-sessie. Het beleid is alleen van invloed op de huidige sessie en onderliggende sessies.

Als u het uitvoeringsbeleid voor een nieuwe sessie wilt instellen, start u PowerShell op de opdrachtregel, zoals cmd.exe of vanuit PowerShell, en gebruikt u vervolgens de parameter ExecutionPolicy om pwsh.exe het uitvoeringsbeleid in te stellen.

Bijvoorbeeld:

pwsh.exe -ExecutionPolicy AllSigned

Het uitvoeringsbeleid dat u instelt, wordt niet opgeslagen in het register. In plaats daarvan wordt deze opgeslagen in de $env:PSExecutionPolicyPreference omgevingsvariabele. De variabele wordt verwijderd wanneer u de sessie sluit waarin het beleid is ingesteld. U kunt het beleid niet wijzigen door de variabelewaarde te bewerken.

Tijdens de sessie heeft het uitvoeringsbeleid dat is ingesteld voor de sessie voorrang op een uitvoeringsbeleid dat is ingesteld in het register voor de lokale computer of huidige gebruiker. Het heeft echter geen voorrang op het uitvoeringsbeleid dat is ingesteld met behulp van een groepsbeleid.

Groepsbeleid gebruiken om uitvoeringsbeleid te beheren

U kunt de instelling Scriptuitvoering inschakelen groepsbeleid instelling gebruiken om het uitvoeringsbeleid van computers in uw onderneming te beheren. De instelling groepsbeleid overschrijft het uitvoeringsbeleid dat is ingesteld in PowerShell in alle bereiken.

De beleidsinstellingen voor het uitvoeren van scripts inschakelen zijn als volgt:

  • Als u Scriptuitvoering inschakelen uitschakelt, worden scripts niet uitgevoerd. Dit is gelijk aan het Restricted uitvoeringsbeleid.

  • Als u Scriptuitvoering inschakelen inschakelt, kunt u een uitvoeringsbeleid selecteren. De groepsbeleid-instellingen zijn gelijk aan de volgende beleidsinstellingen voor uitvoering:

    Groepsbeleid Uitvoeringsbeleid
    Alle scripts toestaan Unrestricted
    Lokale scripts en externe ondertekende scripts toestaan RemoteSigned
    Alleen ondertekende scripts toestaan AllSigned
  • Als de uitvoering van scripts niet is geconfigureerd, heeft dit geen effect. Het uitvoeringsbeleid dat is ingesteld in PowerShell, is effectief.

Met de bestanden PowerShellExecutionPolicy.adm en PowerShellExecutionPolicy.admx voegt u het beleid Scriptuitvoering inschakelen toe aan de computerconfiguratie- en gebruikersconfiguratieknooppunten in groepsbeleid Editor in de volgende paden.

Voor Windows XP en Windows Server 2003:

Administrative Templates\Windows Components\Windows PowerShell

Voor Windows Vista en latere versies van Windows:

Administrative Templates\Classic Administrative Templates\Windows Components\Windows PowerShell

Beleidsregels die zijn ingesteld in het computerconfiguratieknooppunt hebben voorrang op beleidsregels die zijn ingesteld in het knooppunt Gebruikersconfiguratie.

Voor meer informatie raadpleegt u about_Group_Policy_Settings.

Prioriteit van uitvoeringsbeleid

Wanneer u het effectieve uitvoeringsbeleid voor een sessie bepaalt, evalueert PowerShell het uitvoeringsbeleid in de volgende prioriteitsvolgorde:

Group Policy: MachinePolicy
Group Policy: UserPolicy
Execution Policy: Process (or pwsh.exe -ExecutionPolicy)
Execution Policy: CurrentUser
Execution Policy: LocalMachine

Ondertekende en niet-ondertekende scripts beheren

In Windows voegen programma's zoals Internet Explorer en Microsoft Edge een alternatieve gegevensstroom toe aan bestanden die worden gedownload. Hiermee wordt het bestand gemarkeerd als 'afkomstig van internet'. Als uw PowerShell-uitvoeringsbeleid RemoteSigned is, worden in PowerShell geen niet-ondertekende scripts uitgevoerd die zijn gedownload van internet, waaronder e-mail- en chatprogramma's.

U kunt het script ondertekenen of ervoor kiezen om een niet-ondertekend script uit te voeren zonder het uitvoeringsbeleid te wijzigen.

Vanaf PowerShell 3.0 kunt u de Stream-parameter van de Get-Item cmdlet gebruiken om bestanden te detecteren die zijn geblokkeerd omdat ze zijn gedownload van internet. Gebruik de Unblock-File cmdlet om de blokkering van de scripts op te heffen, zodat u ze kunt uitvoeren in PowerShell.

Zie about_Signing, Get-Item en Deblock-File voor meer informatie.

Notitie

Andere methoden voor het downloaden van bestanden kunnen de bestanden niet markeren als afkomstig van de internetzone. Voorbeelden zijn:

  • curl.exe
  • Invoke-RestMethod
  • Invoke-WebRequest

Uitvoeringsbeleid op Windows Server Core en Window Nano Server

Wanneer PowerShell 6 wordt uitgevoerd op Windows Server Core of Windows Nano Server onder bepaalde voorwaarden, kan het uitvoeringsbeleid mislukken met de volgende fout:

AuthorizationManager check failed.
At line:1 char:1
+ C:\scriptpath\scriptname.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

PowerShell maakt gebruik van API's in de Windows Desktop Shell (explorer.exe) om de zone van een scriptbestand te valideren. De Windows Shell is niet beschikbaar op Windows Server Core en Windows Nano Server.

U kunt deze fout ook krijgen op elk Windows-systeem als de Windows Desktop Shell niet beschikbaar is of niet reageert. Tijdens het aanmelden kan bijvoorbeeld een PowerShell-aanmeldingsscript worden uitgevoerd voordat het Windows-bureaublad gereed is, wat resulteert in een fout.

Voor het gebruik van een uitvoeringsbeleid van ByPass of AllSigned is geen zonecontrole vereist waarmee het probleem wordt vermeden.

Zie ook