BLOG
Wissenstransfer von IT-Spezialisten
| |

PowerShell: Profile und Ausführungsrestriktionen – Part 3

3.1    PowerShell Profile

Ein PowerShell Profil ist ein Skript, welches beim Start der Shell automatisch ausgeführt wird. Es dient der Anpassung der Shell an die Bedürfnisse des Benutzers. Grundsätzlich können in einem PS Profil alle PS Befehle verwendet werden. Es können Befehle, Aliase, Funktionen, Variablen definiert werden, sowie Snapp-Ins, Module und PSDrives eingebunden werden. Auch die Werte von vordefinierten Variablen können verändert werden (z.B. die maximale Anzahl von zu speichernden Fehlern oder die Fensterfarben). Die PowerShell unterstützt diverse Profile. Für die „normal“ gestartete PS werden bis zu vier Profilen beachtet und beim Vorhandensein geladen:

Beschreibung                             Pfad
Current User, Current Host     $Home\My Documents\WindowsPowerShell\Profile.ps1
Current User, All Hosts            $Home\My Documents\Profile.ps1
All Users, Current Host            $PsHome\Microsoft.PowerShell_profile.ps1
All Users, All Hosts                   $PsHome\Profile.ps1

Die Profile werden von “unten nach oben” geladen, d.h. der erste Eintrag hat die höchste Priorität und überschreibt im Falle eines Konfliktes vorhandene Werte. Die in den Pfaden verwendeten Variablen haben folgende Bedeutung (über Variablen siehe Kapitel 3.4):

$Home         Home Directory des Benutzers
$PsHome    Installationsverzeichnis der PowerShell

Für Anwendungen, welche die PowerShell selbst hosten (wie z.B. ISE oder auch andere PS Editoren), kann es weitere, anwendungsspezifische Profile geben.

Die PowerShell erzeugt eine sog. Automatische Variable mit dem Namen $Profile. Sie speichert die tatsächlichen Pfade für die einzelnen Profile. Mit dem folgenden Befehl können alle aktuellen Werte angezeigt werden:

1
3.    $profile | get-member -type noteproperty

„Die Verwendung von Profilen in der PowerShell hört sich im ersten Moment sehr gut an. Das Problem ist, dass das Profil vielleicht nicht überall zum Kunden mitgenommen werden kann. Wird reger Gebrauch von Aliasen, Funktionen, etc. in einem Profil gemacht, gewöhnt man sich schnell daran, doch überall, wo das Profil unzugänglich ist, stehen die Anpassungen nicht zur Verfügung und es wird doch notwendig, die nativen Befehle zu verwenden. Wir empfehlen also möglichst auf die Anpassung der Profile zu verzichten.

 

Wenn die Ausführungsrestriktionen (siehe Kapitel 3.2) den Standardwert haben oder die Ausführung von lokal gespeicherten Skripts nicht zulassen, werden keinerlei Profile verarbeitet. Wenn eine PS Sitzung auf einem Remote Computer gestartet wird, werden ebenfalls keine Profile automatisiert ausgeführt. Die Ausführung eines Profils muss dann manuell erfolgen.
Detailliertere Informationen über PowerShell Profile können mit dem folgenden Befehl in der PS angezeigt werden:

1
1.    Get-Help about_profiles

3.2    Ausführungsrestriktionen (Execution Policy)

Besonders in der Version 2.0 der PowerShell hat Microsoft  großen Wert auf die Sicherheit gelegt. Dazu gehören u.a. die sog. Execution Policies oder Ausführungsrestriktionen. Diese Einschränkungen beziehen sich auf die Ausführung von Skripten. Im Normalfall dürfen keinerlei Skripte ausgeführt werden (Restricted). Die Execution Policies können grundsätzlich auf fünf Bereiche (scopes) angewendet werden: Machine Policy, User Policy, Process, Current User, Local Machine. Folgende Policies können jedem der drei Bereiche zugewiesen werden:

NameBedeutung
RestrictedKeine Skripte, Module, Konfigurationsdateien oder Profile dürfen ausgeführt werden
AllSignedAlle Skripte, welche von einem vertrauenswürdigen Herausgeber signiert sind, dürfen ausgeführt werden
RemoteSigned  Alle Skripte, welche aus Quellen außerhalb des lokalen Computers stammen, müssen von einem vertrauenswürdigen Herausgeber signiert sein, um ausgeführt werden zu können. Lediglich lokal erstellte Skripte dürfen ohne Signierung ausge-führt werden
UnrestrictedAlle Skripte dürfen ausgeführt werden, auch nicht signierte. Skripte, welche aus dem Internet stammen, können nur nach Bestätigung einer Warnung ausgeführt werden
BypassKeine Restriktionen, keine Abfragen und keine Warnungen. Alle Skripte dürfen ausgeführt werden
UndefinedKeine Execution Policy im aktuellen Bereich. Wenn in allen Bereichen gesetzt, gilt die Standard Policy: Restricted

Tabelle 3 1: Einstellungsmöglichkeiten für Execution Policies.

Die Execution Policies haben für den aktuellen Prozess die höchste und für die lokale Maschine die niedrigste Priorität. Mit folgenden Befehlen können die Execution Policies angezeigt, bzw. modifiziert werden:

1
2
1.    Get-ExecutionPolicy
2.    Set-ExecutionPolicy

Bei Set-ExecutionPolicy kann mit dem Parameter „-Scope“ auch noch der Bereich ausgewählt werden.