Zum Hauptinhalt springen

Ausführungsrichtlinien

Cmdlets und Befehle können jederzeit interaktiv in der Konsole ausgeführt werden, aber die Ausführung von Skripten wird standardmäßig blockiert. Hierfür verantwortlich ist die sogenannte Ausführungsrichtlinie, die bestimmt, welche Skripte ausgeführt werden dürfen. Die Ausführungsrichtlinie einer Powershell-Konsole kann man mit Get-Executionpolicy aus geben.

Get-ExecutionPolicy

 Es gibt 5 verschiedene Richtlinien:

Richtlinie

Bedeutung

Restricted (Default)

Verhindert das Ausführen jeglicher Skripte

AllSigned

Skripte müssen digital signiert sein, damit sie ausgeführt werden können

RemoteSigned

Skripte, die aus dem Internet heruntergeladen wurden oder aus einer

Freigabe gestartet werden, müssen digital signiert sein

Unrestricted

Alle Skripte können ohne Einschränkungen ausgeführt werden, aber bei

aus dem Internet heruntergeladenen Skripten wird gewarnt

Bypass

Powershell deaktiviert sämtliche Sicherheitsprüfungen, es werden keine

Warnungen ausgegeben

Um die Standeinstellung von Restricted auf eine andere Richtlinie umzustellen, verwendet man das Cmdlet Set-ExecutionPolicy:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

Tatsächlich können mehrere Ausführungsrichtlinien gleichzeitig in unterschiedlichen Geltungsbereichen (Scopes) zugewiesen sein. Das obige Beispiel setzt den Gültigkeitsbereich für den Computer, der standardmäßig für alle Benutzer gilt.

Ein Benutzerprofil hat aber eine eigene Ausführungsrichtlinie. Außerdem gibt es noch die drei Bereiche Process, die die Einstellungen für einen spezifischen Powershell-Prozess festlegen, sowie UserPolicy und MachinePolicy, die beide über Gruppenrichtlinien gesteuert werden.

Priorität

Scope (Geltungsbereich)

Konfiguriert über

1 (höchste)

MachinePolicy

Gruppenrichtlinien (Computer)

2

UserPolicy

Gruppenrichtlinien (Benutzer)

3

Process

Powershell.exe -ExecutionPolicy

4

CurrentUser

Set-Executionpolicy -Scope CurrentUser

5 (niedrigste)

LocalMachine

Set-ExecutionPolicy -Scope LocalMachine

Normalerweise ist nur die Computerrichtlinie gesetzt, und die anderen vier Bereiche (Scopes) sind undefiniert. Dadurch gilt die Computerrichtlinie für alle Benutzer. Man kann aber Benutzerspezifisch die Einstellungen überschreiben. Die Benutzereinstellungen haben, wie man in der Tabelle sehen kann, Vorrang vor den Computereinstellungen. Um die Benutzerkonfiguration zu ändern, muss man Set-ExecutionPolicy mit dem Parameter -Scope aufrufen und einen Bereich angeben:

Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser

Die anderen drei Gültigkeitsbereich können nicht über Set-Executionpolicy gesetzt werden. Um den Prozess-Scope zu setzen, starten Sie die Powershell.exe mit dem Parameter /Executionpolicy und geben als Argument die gewünschte Ausführungsrichtlinie an:

powershell.exe /ExecutionPolicy Unrestricted -file C:\skripte\skript.ps1

Die Gültigkeitsbereiche UserPolicy und MachinePolicy können nur über Gruppenrichtlinien konfiguriert werden und überschreiben alle anderen Einstellungen. So ist es prinzipiell möglich, die Ausführung von Skripten auf einem Computer grundsätzlich zu unterbinden. Die Konfiguration der Ausführungsrichtlinien über Gruppenrichtlinien wird im Abschnitt Ausführungsrichtlinien setzen beschrieben. 

Get-Executionpolicy -List zeigt alle konfigurierten Ausführungsrichtlinien. Grundsätzlich gilt die Richtlinie, die von oben gesehen als erste eine definierte Richtlinie hat.

Get-ExecutionPolicy -List

Scope          ExecutionPolicy
-----          ---------------
MachinePolicy  Undefined      
UserPolicy     Undefined      
Process        Bypass         
CurrentUser    Undefined      
LocalMachine   Bypass