Share via


about_Execution_Policies

Korte beschrijving

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

Lange beschrijving

Het uitvoeringsbeleid van PowerShell is een veiligheidsfunctie waarmee de omstandigheden worden bepaald waaronder PowerShell configuratiebestanden laadt en scripts uitvoert. Deze functie helpt de uitvoering van schadelijke scripts te voorkomen.

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 voor computers en gebruikers in te stellen.

Het uitvoeringsbeleid voor de lokale computer en de huidige gebruiker wordt opgeslagen in het register. U hoeft geen uitvoeringsbeleid in uw PowerShell-profiel in te stellen. 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 dat gebruikersacties beperkt. Gebruikers kunnen bijvoorbeeld eenvoudig een beleid omzeilen door de inhoud van het script op de opdrachtregel te typen wanneer ze een script niet kunnen uitvoeren. In plaats daarvan helpt het uitvoeringsbeleid gebruikers bij het instellen van basisregels en voorkomt u dat ze deze onbedoeld schenden.

Op niet-Windows-computers is Unrestricted het standaarduitvoeringsbeleid 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 wordt geretourneerd Unrestricted op niet-Windows-platforms, 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 zijn ondertekend door een vertrouwde uitgever, inclusief scripts die u op de lokale computer schrijft.
    • Hiermee wordt u gevraagd om scripts uit te voeren van uitgevers die u nog niet hebt geclassificeerd als vertrouwd of niet-vertrouwd.
    • Risico's bij het uitvoeren van ondertekende, maar schadelijke scripts.
  • Bypass

    • Er wordt niets geblokkeerd en er zijn geen waarschuwingen of aanwijzingen.
    • 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 met een eigen beveiligingsmodel.
  • 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 voor scripts en configuratiebestanden die zijn gedownload van internet, waaronder e-mail- en chatprogramma's.
    • Vereist geen digitale handtekeningen voor scripts die zijn geschreven op de lokale computer en niet van internet zijn gedownload.
    • Hiermee worden scripts uitgevoerd die zijn gedownload van internet en niet zijn ondertekend, als de scripts zijn gedeblokkeerd, bijvoorbeeld met behulp van de Unblock-File cmdlet.
    • Risico's met 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 worden afzonderlijke opdrachten toegestaan, maar geen scripts.
    • Hiermee voorkomt u het uitvoeren van alle scriptbestanden, 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, is Undefinedhet effectieve uitvoeringsbeleid Restricted 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 bestaat een risico op het uitvoeren van schadelijke scripts.
    • Waarschuwt de gebruiker voordat scripts en configuratiebestanden worden uitgevoerd die zich niet uit de zone lokaal intranet bevinden.

    Notitie

    Op systemen die geen onderscheid maken tussen UNC-paden (Universal Naming Convention) en internetpaden, mogen scripts die zijn geïdentificeerd door een UNC-pad mogelijk niet worden uitgevoerd met het RemoteSigned-uitvoeringsbeleid .

Bereik van uitvoeringsbeleid

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

De geldige waarden voor Scope zijn MachinePolicy, UserPolicy, Process, CurrentUser 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 heeft, 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:PSExecutionPolicyPreferencein plaats van in 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 cmdlet om het effectieve uitvoeringsbeleid voor de huidige PowerShell-sessie op te Get-ExecutionPolicy halen.

Met de volgende opdracht wordt het effectieve uitvoeringsbeleid ophaalt:

Get-ExecutionPolicy

Ga als volgende te werk 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 lijkt op 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 het uitvoeringsbeleid wilt instellen voor een bepaald bereik, gebruikt u de Scope parameter van Get-ExecutionPolicy.

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

Get-ExecutionPolicy -Scope CurrentUser

Het uitvoeringsbeleid wijzigen

Gebruik Set-ExecutionPolicy de cmdlet om het PowerShell-uitvoeringsbeleid op uw Windows-computer te wijzigen. De wijziging is onmiddellijk van kracht. U hoeft PowerShell niet opnieuw te starten.

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

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

Notitie

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

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 voor het wijzigen van een uitvoeringsbeleid kan slagen, maar het effectieve uitvoeringsbeleid kan nog steeds niet worden gewijzigd.

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

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 executionPolicy-parameter van pwsh.exe gebruiken om 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 van pwsh.exe om 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 het 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 waarde van de variabele 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 prioriteit boven het uitvoeringsbeleid dat is ingesteld met behulp van een groepsbeleid.

Gebruik groepsbeleid om uitvoeringsbeleid te beheren

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

De beleidsinstellingen voor Scriptuitvoering 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 groepsbeleidsinstellingen zijn gelijk aan de volgende instellingen voor uitvoeringsbeleid:

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

Met de bestanden PowerShellExecutionPolicy.adm en PowerShellExecutionPolicy.admx wordt het beleid Scriptuitvoering inschakelen toegevoegd aan de knooppunten Computerconfiguratie en Gebruikersconfiguratie 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 knooppunt Computerconfiguratie hebben voorrang op beleidsregels die zijn ingesteld in het knooppunt Gebruikersconfiguratie.

Voor meer informatie raadpleegt u about_Group_Policy_Settings.

Prioriteit van uitvoeringsbeleid

Bij het bepalen van het effectieve uitvoeringsbeleid voor een sessie, evalueert PowerShell het uitvoeringsbeleid in de volgende prioriteitsvolgorde:

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

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, voert PowerShell geen niet-ondertekende scripts uit 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 parameter Stream van de Get-Item cmdlet gebruiken om bestanden te detecteren die zijn geblokkeerd omdat ze van internet zijn gedownload. 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 Unblock-File voor meer informatie.

Notitie

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

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

Uitvoeringsbeleid op Windows Server Core en Windows Nano Server

Wanneer PowerShell 6 onder bepaalde omstandigheden wordt uitgevoerd op Windows Server Core of Windows Nano Server, 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 gebruikt 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 een PowerShell-aanmeldingsscript bijvoorbeeld worden uitgevoerd voordat het Windows-bureaublad gereed is, wat resulteert in een fout.

Het gebruik van een uitvoeringsbeleid van ByPass of AllSigned vereist geen zonecontrole, waardoor het probleem wordt voorkomen.

Zie ook