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