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 huidige gebruiker worden opgeslagen in de PowerShell-configuratiebestanden. 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 bypass een beleid maken 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 default uitvoeringsbeleid 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 default uitvoeringsbeleid in.
- Restricted voor Windows-clients.
- RemoteSigned voor Windows-servers.
RemoteSigned
- Het default uitvoeringsbeleid 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 default uitvoeringsbeleid 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 de huidige scope.
- Als het uitvoeringsbeleid in alle bereiken is Undefined, is Restricted het effectieve uitvoeringsbeleid voor Windows-clients en RemoteSigned voor Windows Server.
Unrestricted
- Het default uitvoeringsbeleid 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 .
Uitvoeringsbeleid scope
U kunt een uitvoeringsbeleid instellen dat alleen van kracht is in een bepaalde scope.
De geldige waarden Scope zijn MachinePolicyUserPolicy, ProcessCurrentUser en LocalMachine. LocalMachine is de functie bij het default 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
Dit Processscope is alleen van invloed op de huidige PowerShell-sessie. Het uitvoeringsbeleid wordt opgeslagen in de omgevingsvariabele
$env:PSExecutionPolicyPreference
in plaats van het configuratiebestand. Wanneer de PowerShell-sessie is gesloten, worden de variabele en waarde verwijderd.CurrentUser
Het uitvoeringsbeleid is alleen van invloed op de huidige gebruiker. Het wordt opgeslagen in het CurrentUser-configuratiebestand .
LocalMachine
Het uitvoeringsbeleid is van invloed op alle gebruikers op de huidige computer. Het wordt opgeslagen in het configuratiebestand allusers .
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.
Gebruik de scopeScope parameter van Get-ExecutionPolicy
.
Met de volgende opdracht wordt bijvoorbeeld het uitvoeringsbeleid voor currentuser scopeophaalt:
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 configuratiebestand en blijft deze van kracht totdat u het opnieuw wijzigt.
Als u het uitvoeringsbeleid voor het Processscopebeleid instelt, wordt het niet opgeslagen in het configuratiebestand. Het uitvoeringsbeleid wordt bewaard totdat de huidige process en 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 LocalMachinescope 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 scope:
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 scopebeleid 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, scopeis Restrictedhet effectieve uitvoeringsbeleid , dat is het default 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 configuratiebestand. 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 configuratiebestand voor de lokale computer of de 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 de node Computerconfiguratie hebben voorrang op beleidsregels die zijn ingesteld in de node 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 Windows 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 AllSigned is geen zonecontrole vereist waarmee het probleem wordt vermeden.