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 voorwaarden worden gecontroleerd waaronder Configuratiebestanden worden geladen en scripts worden uitgevoerd. Deze functie helpt de uitvoering van schadelijke scripts te voorkomen.

Op een Windows kunt u een uitvoeringsbeleid instellen voor de lokale computer, voor de huidige gebruiker of voor een bepaalde sessie. U kunt ook een groepsbeleid 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 om basisregels in te stellen en te voorkomen dat ze onbedoeld in overtreding zijn.

Op 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 dit niet wordt ondersteund. Hoewel Get-ExecutionPolicy retourneert Unrestricted op niet-Windows platformen, Bypass komt het gedrag echt overeen omdat deze platformen de Windows-beveiliging implementeren.

PowerShell-uitvoeringsbeleid

Het afdwingen van deze beleidsregels vindt alleen plaats Windows platformen. 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.
  • Vraagt u om scripts van uitgevers uit te voeren die u nog niet als vertrouwd of niet-vertrouwd hebt geclassificeerd.
  • Risico's bij het uitvoeren van ondertekende, maar schadelijke scripts.

Bypass

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

Default

  • Hiermee stelt u het standaarduitvoeringsbeleid.
  • 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 van internet worden gedownload, 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.
  • Voert scripts uit die van internet worden gedownload en niet zijn ondertekend, als de scripts zijn geblokkeerd, 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.
  • Staat afzonderlijke opdrachten toe, maar staat 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 scopes is, is Undefined****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 op het uitvoeren van schadelijke scripts.
  • Waarschuwt de gebruiker voordat scripts en configuratiebestanden worden uitgevoerd die niet afkomstig zijn uit de zone lokaal intranet.

Notitie

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

Bereik van uitvoeringsbeleid

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

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 prioriteit heeft, is van kracht 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 is gesloten, worden de variabele en waarde verwijderd.

CurrentUser

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

LocalMachine

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

Het uitvoeringsbeleid beheren met PowerShell

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

Met de volgende opdracht haalt u het effectieve uitvoeringsbeleid op:

Get-ExecutionPolicy

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

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.

Gebruik de parameter van om het uitvoeringsbeleid voor een bepaald bereik Scope op te halen Get-ExecutionPolicy.

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

Get-ExecutionPolicy -Scope CurrentUser

Het uitvoeringsbeleid wijzigen

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

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

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

Notitie

In Windows Vista en latere versies van Windows kunt u PowerShell starten met de optie Als administrator uitvoeren om opdrachten uit te voeren die het uitvoeringsbeleid voor de lokale computer wijzigen, LocalMachine-bereik.

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 nog steeds niet het effectieve uitvoeringsbeleid wijzigen.

Een opdracht die het uitvoeringsbeleid voor de lokale computer in stelt, kan bijvoorbeeld slagen maar worden overschrijven 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 verwijderen Scope:

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser

Als er geen uitvoeringsbeleid is ingesteld in een bereik, is Restricted het effectieve uitvoeringsbeleid . Dit is de standaardinstelling voor Windows clients.

Een ander beleid voor één sessie instellen

U kunt de parameter ExecutionPolicy van gebruiken pwsh.exe 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, cmd.exe zoals 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 in stelt, wordt niet opgeslagen in het register. In plaats daarvan wordt deze opgeslagen in de omgevingsvariabele $env:PSExecutionPolicyPreference . De variabele wordt verwijderd wanneer u de sessie sluit waarin het beleid is ingesteld. U kunt het beleid niet wijzigen door de variabele waarde 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 in groepsbeleid gebruiken om het uitvoeringsbeleid van computers in uw onderneming te beheren. De groepsbeleid overschrijven het uitvoeringsbeleid dat is ingesteld in PowerShell in alle scopes.

De beleidsinstellingen voor scriptuitvoering in-/uitschakelen zijn als volgt:

  • Als u Scriptuitvoering in-/uitschakelen, worden scripts niet uitgevoerd. Dit is gelijk aan het uitvoeringsbeleid Restricted .

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

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

De bestanden PowerShellExecutionPolicy.adm en PowerShellExecutionPolicy.admx voegen het beleid Scriptuitvoering in-/uit te voeren toe 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

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

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 als 'afkomstig van internet' markeert. Als uw PowerShell-uitvoeringsbeleid RemoteSigned is, worden in PowerShell geen niet-ondertekende scripts uitgevoerd die van internet worden gedownload, 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 Get-Item van de cmdlet gebruiken om bestanden te detecteren die zijn geblokkeerd omdat ze van internet zijn gedownload. Gebruik de Unblock-File cmdlet om de scripts te deblokkeren, zodat u ze in PowerShell kunt uitvoeren.

Zie about_Signing, Get-Item en Deblokkeren 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 Window Nano Server

Wanneer PowerShell 6 onder bepaalde voorwaarden 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 maakt gebruik van API's in 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 krijgen als de Windows Desktop Shell niet beschikbaar is of niet reageert. Tijdens het aanmelden kan bijvoorbeeld een PowerShell-aanmeldingsscript worden uitgevoerd voordat de 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