Tags: PowerShell
Praktisch alle Shells und Kommandozeilen bieten eine Eingabeaufforderung, die dem User wesentliche Informationen zu seinem Kontext liefert. PowerShell gibt dort standardmäßig aber nur Auskunft über das aktuelle Verzeichnis. Da sein Aussehen über eine function bestimmt wird, sind der Gestaltung des Prompts jedoch keine Grenzen gesetzt.
Im alten Kommandointerpreter ist die Anpassung des Prompts auf die Verwendung einiger vordefinierter Variablen beschränkt. PowerShell hingegen definiert eine Funktion namens prompt(), die das Aussehen der Eingabeaufforderung bestimmt. Sie sieht per Voreinstellung folgendermaßen aus:
Baut man eine Remote-Session auf, dann fügt Enter-PSSession den Namen des Remote-Rechners am Anfang des Prompts ein. Es ist jedoch nicht Cmdlets vorbehalten, die Eingabeaufforderung anzupassen. Man kann dies tun, indem man die Funktion prompt() einfach überschreibt.
Prompt-Funktion modifizieren
Dabei bietet sich an, sie nicht von Grund auf neu zu schreiben, sondern einfach zu modifizieren. Wenn man auf die Anzeige des Debug-Modus verzichten und stattdessen die aktuelle Uhrzeit vor dem Prompt einblenden möchte, dann kann man dies folgendermaßen erreichen:
Alternativ könnte man den Namen des aktuellen Users anzeigen. Dabei bietet es sich an, die Umgebungsvariable USERNAME auszulesen:
Farben ändern
Eine beliebte Änderung der Eingabeaufforderung betrifft deren farbliche Gestaltung. Diese kann man durch Verwendung von Escape-Sequenzen erreichen. Das folgende Beispiel modifiziert die Standardfunktion so, dass der Prompt in Rot (Code 31) dargestellt wird.
Die Farbgebung muss sich nicht auf Geschmacksfragen beschränken, sondern kann auch nützliche Informationen transportieren.
So könnte man den Prompt immer dann einfärben, wenn ein User mit administrativen Rechten angemeldet ist. Im folgenden Beispiel erscheint die Eingabeaufforderung bei einem Admin in Rot, bei einem Standardbenutzer im üblichen Weiß (Code 27):
Nicht alle PowerShell-Hosts unterstützen die Terminal-Sequenzen, so dass man sich in diesem Fall anders behelfen muss. Das gilt etwa für die PowerShell ISE. Dort könnte man die Farben für Admins versus Standard-User so anpassen:
Grundsätzlich kann man über diese Beispiele hinaus jedes beliebige Cmdlet oder jede Variable für die Gestaltung des Prompts verwenden, sofern einem dies nützlich erscheint.
Dauerhafte Änderung nur über Profile
Beim Überschreiben der Funktion prompt() sollte man bedenken, dass sich dies immer nur auf die jeweilige Sitzung auswirkt. Startet man eine neue Session, dann erhält man wieder die übliche Eingabeaufforderung.
Möchte man die Änderungen permanent beibehalten, dann muss man die modifizierte Version von prompt() in das PowerShell-Profil aufnehmen.
Zusammenfassung
Anders als bei cmd.exe, wo man auf einige vordefinierte Variablen für die Gestaltung des Prompts angewiesen ist, stehen in PowerShell praktisch alle sprachlichen Mittel zur Verfügung, um Informationen in die Eingabeaufforderung zu integrieren. Dabei stellt sich natürlich die Frage, ob das Ergebnis immer sinnvoll ist.
So kann man Farben zwar für optische Spielereien nutzen, aber auch, um nützliche Informationen zum aktuellen Kontext zu liefern. Dabei lassen sich die Escape-Sequenzen jedoch nicht auf allen PowerShell-Hosts einsetzen, so dass man dort stattdessen etwa zu Write-Host greifen muss.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
Weitere Links