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 gecontroleerd 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 groepsbeleidsinstelling 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 dat gebruikersacties 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 basisregels in te stellen en te voorkomen dat ze deze onbedoeld schenden.

Op niet-Windows-computers is het standaarduitvoeringsbeleid en Unrestricted kan het niet worden gewijzigd. De Set-ExecutionPolicy cmdlet is beschikbaar, maar PowerShell geeft een consolebericht weer dat deze niet wordt ondersteund. Hoewel Get-ExecutionPolicy het resultaat 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 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, 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 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 e-mail- en chatprogramma's.
    • Er zijn geen digitale handtekeningen vereist voor scripts die op de lokale computer zijn geschreven en niet van internet zijn gedownload.
    • 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 uit andere bronnen dan internet en ondertekende scripts die schadelijk kunnen zijn.
  • Restricted

    • Het standaarduitvoeringsbeleid voor Windows-clientcomputers.
    • Hiermee worden afzonderlijke opdrachten toegestaan, maar worden scripts niet toegestaan.
    • 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 bestaat een risico dat schadelijke scripts worden uitgevoerd.
    • Waarschuwt de gebruiker voordat scripts en configuratiebestanden worden uitgevoerd die zich niet in de zone lokaal intranet bevinden.

    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 Scope zijn MachinePolicyUserPolicy, 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:PSExecutionPolicyPreferencein plaats van het register. Wanneer de PowerShell-sessie is 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.

Met de volgende opdracht wordt het effectieve uitvoeringsbeleid uitgevoerd:

Get-ExecutionPolicy

Als u alle uitvoeringsbeleidsregels wilt ophalen die van invloed zijn op de huidige sessie en deze in volgorde van prioriteit weergeven:

Get-ExecutionPolicy -List

Het resultaat ziet er ongeveer als volgt uit:

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

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 voor de scopes LocalMachine of CurrentUser instelt, 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 waarmee het uitvoeringsbeleid voor de lokale computer wordt gewijzigd, start u PowerShell met de optie Uitvoeren als administrator .

Ga als volgende te werk om uw uitvoeringsbeleid te wijzigen:

Set-ExecutionPolicy -ExecutionPolicy <PolicyName>

Voorbeeld:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

Het uitvoeringsbeleid instellen in een bepaald bereik:

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

Voorbeeld:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Een opdracht voor het wijzigen van een uitvoeringsbeleid 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 pwsh.exe ExecutionPolicy 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 om pwsh.exe het uitvoeringsbeleid in te stellen.

Voorbeeld:

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 prioriteit boven het uitvoeringsbeleid dat is ingesteld met behulp van een groepsbeleid.

Gebruik groepsbeleid om uitvoeringsbeleid te beheren

U kunt de groepsbeleidsinstelling Scriptuitvoering inschakelen 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 komt overeen met 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.

Zie about_Group_Policy_Settings voor meer informatie.

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: 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, worden in PowerShell geen niet-ondertekende scripts uitgevoerd die worden gedownload van internet, inclusief 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 Deblokkeren voor meer informatie.

Notitie

Andere methoden voor het downloaden van bestanden kunnen de bestanden mogelijk niet markeren als afkomstig van de internetzone. Enkele voorbeelden:

  • 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 op elk Windows-systeem krijgen als de Windows Desktop Shell niet beschikbaar is of niet reageert. Tijdens het aanmelden kan bijvoorbeeld een PowerShell-aanmeldingsscript worden uitgevoerd voordat Windows Desktop 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