THEMA about_Prompts KURZBESCHREIBUNG Beschreibt die Prompt-Funktion und veranschaulicht, wie eine benutzerdefinierte Prompt-Funktion erstellt wird. DETAILBESCHREIBUNG Die Windows PowerShell-Eingabeaufforderung gibt an, dass Windows PowerShell bereit ist, einen Befehl auszuführen: PS C:\> Die Windows PowerShell-Eingabeaufforderung wird von der Prompt-Funktion bestimmt. Sie können die Eingabeaufforderung anpassen, indem Sie eine eigene Prompt-Funktion erstellen. Anschließend können Sie die Funktion im Windows PowerShell-Profil speichern. Prompt-Funktion Die Prompt-Funktion bestimmt die Darstellung der Windows PowerShell- Eingabeaufforderung. Windows PowerShell verfügt über eine integrierte Prompt-Funktion. Diese kann jedoch überschrieben werden, indem eine eigene Prompt-Funktion definiert wird. Die Prompt-Funktion hat folgende Syntax: function prompt { <Funktionstext> } Die Prompt-Funktion muss ein Objekt zurückgeben, in der Regel ist dies eine Zeichenfolge. Es wird empfohlen, eine Zeichenfolge oder ein Objekt zurückzugeben, das als Zeichenfolge formatiert ist. Die Zeichenfolge sollte in eine Zeile mit 80 Zeichen Länge passen. Beispiel: PS C:\> function prompt {"Hallo, Welt > "} Hallo, Welt > Wie alle Funktionen wird auch die Prompt-Funktion im Laufwerk "Function:" gespeichert. Um den Code in der aktuellen Prompt-Funktion anzuzeigen, geben Sie Folgendes ein: (get-item function:prompt).definition Dieser Befehl verwendet das Cmdlet "Get-Item", um das Eingabeaufforderungselement im Laufwerk "Function:" anzuzeigen. Anschließend wird der Wert der Definition-Eigenschaft für die Prompt-Funktion mit der punktierten Notation angezeigt. Standardeingabeaufforderung Die Standardeingabeaufforderung von Windows PowerShell lautet wie folgt: PS> Diese Eingabeaufforderung wird nur angezeigt, wenn die prompt-Funktion einen Fehler generiert oder keine Zeichenfolge oder kein Objekt zurückgibt. PS C:\> function prompt {$null} PS> Da Windows PowerShell über eine integrierte Eingabeaufforderung verfügt, wird die Standardeingabeaufforderung normalerweise nicht angezeigt, solange Sie keine eigene prompt-Funktion schreiben. Integrierte Eingabeaufforderung Windows PowerShell enthält eine integrierte prompt-Funktion ein, mit der die bekannten Eingabeaufforderungen erstellt werden. Die integrierte prompt-Funktion lautet wie folgt: function prompt { $(if (test-path variable:/PSDebugContext) { '[DBG]: ' } else { '' }) + 'PS ' + $(Get-Location) ` + $(if ($nestedpromptlevel -ge 1) { '>>' }) + '> ' } Die Funktion bestimmt mit dem Cmdlet "Test-Path", ob die automatische Variable "$PSDebugContext" aufgefüllt wird. Wenn $PSDebugContext aufgefüllt wird, wird der Debugmodus verwendet, und der Eingabeaufforderung wird "[DBG]" hinzugefügt, wie nachfolgend veranschaulicht: [DBG] PS C:\ps-test> Wenn $PSDebugContext nicht aufgefüllt wird, fügt die Funktion der Eingabeaufforderung "PS" hinzu. Außerdem ruft die Funktion mit dem Cmdlet "Get-Location" den aktuellen Speicherort im Dateisystemverzeich nis ab. Anschließend wird eine schließende spitze Klammer (>) hinzugefügt. Beispiel: PS C:\ps-test> In einer geschachtelten Eingabeaufforderung werden der Eingabeaufforderung von der Funktion zwei spitze Klammern (>>) hinzugefügt. (Bei einer geschachtelten Eingabeaufforderung weist die automatische Variable "$NestedPromptLevel" einen Wert größer als 1 auf.) Wenn Sie beispielsweise in einer geschachtelten Eingabeauffor- derung debuggen, sieht die Eingabeaufforderung ungefähr wie folgt aus: [DBG] PS C:\ps-test>>> Das Cmdlet "Enter-PSSession" stellt den Namen des Remotecomputers der aktuellen Prompt-Funktion voran. Wenn Sie mit dem Cmdlet "Enter-PSSession" eine Sitzung mit einem Remotecomputer starten, ändert sich die Eingabeaufforderung und enthält den Namen des Remotecomputers. Beispiel: PS Hallo, Welt> Enter-PSSession Server01 [Server01]: PS Hallo, Welt> Andere Windows PowerShell-Hostanwendungen und alternative Shells weisen möglicherweise eigene benutzerdefinierte Eingabeaufforderungen auf. Weitere Informationen über die automatische Variable "$PSDebugContext" und die automatische Variable "$NestedPromptLevel" finden Sie unter "about_Automatic_Variables". Anpassen der Eingabeaufforderung Um die Eingabeaufforderung anzupassen, schreiben Sie eine neue Prompt-Funktion. Die Funktion ist nicht geschützt, sie kann daher überschrieben werden. Um eine prompt-Funktion zu schreiben, geben Sie Folgendes ein: function prompt { } Geben Sie anschließend zwischen den geschweiften Klammern die Befehle oder die Zeichenfolge ein, mit denen die Eingabeaufforde- rung erstellt wird. Die folgende Eingabeaufforderung enthält beispielsweise den Computernamen: function prompt {"PS [$env:COMPUTERNAME]> "} Die Eingabeaufforderung auf dem Computer "Server01" sieht in etwa wie folgt aus: PS [Server01] > Die folgende prompt-Funktion enthält das aktuelle Datum und die aktuelle Uhrzeit: function prompt {"$(get-date)> "} Die Eingabeaufforderung sieht ähnlich wie die folgende Eingabeaufforderung aus: 01/01/2008 17:49:47> Sie können auch die Prompt-Standardfunktion ändern: function prompt { $(if (test-path variable:/PSDebugContext) { '[DBG]: ' } else { '' }) + "$(get-date)" ` + $(if ($nestedpromptlevel -ge 1) { '>>' }) + '> ' } Die folgende geänderte Prompt-Funktion fügt der integrierten Windows PowerShell-Eingabeaufforderung z. B. "[ADMIN]:" hinzu, wenn Windows PowerShell mit der Option "Als Administrator ausführen" geöffnet wird: function prompt { $identity = [Security.Principal.WindowsIdentity]::GetCurrent() $principal = [Security.Principal.WindowsPrincipal] $identity $(if (test-path variable:/PSDebugContext) { '[DBG]: ' } elseif($principal.IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { "[ADMIN]: " } else { '' }) + 'PS ' + $(Get-Location) + $(if ($nestedpromptlevel -ge 1) { '>>' }) + '> ' } Wenn Sie Windows PowerShell mit der Option "Als Administrator ausführen" starten, wird eine Eingabeaufforderung ähnlich der folgenden angezeigt: [ADMIN]: PS C:\ps-test> Die folgende Prompt-Funktion zeigt die Verlaufs-ID des nächsten Befehls an. Mit dem Cmdlet "Get-History" können Sie den Befehlsverlauf anzeigen. function prompt { # Das @-Zeichen erstellt ein Array, falls nur ein Verlaufselement vorhanden ist. $history = @(get-history) if($history.Count -gt 0) { $lastItem = $history[$history.Count - 1] $lastId = $lastItem.Id } $nextCommand = $lastId + 1 $currentDirectory = get-location "PS: $nextCommand $currentDirectory >" } Die folgende Eingabeaufforderung erstellt mithilfe des Cmdlets "Write-Host" und des Cmdlets "Get-Random" eine Eingabeaufforderung, deren Farbe sich zufällig ändert. Da Write-Host in die aktuelle Hostanwendung schreibt, jedoch kein Objekt zurückgibt, enthält diese Funktion eine Return-Anweisung. Fehlt diese, verwendet Windows PowerShell die Standardeingabeaufforderung "PS>". function prompt { $color = get-random -min 1 -max 16 write-host ("PS " + $(get-location) +">") -nonewline -foregroundcolor $color return " " } Speichern der Eingabeaufforderung Wie alle Funktionen wirkt sich die Prompt-Funktion nur auf die aktuelle Sitzung aus. Fügen Sie die Prompt-Funktion den Windows PowerShell-Profilen hinzu, um sie für zukünftige Sitzungen zu speichern. Weitere Informationen zu Profilen finden Sie unter "about_Profiles". SIEHE AUCH Get-Location Enter-PSSession Get-History Get-Random Write-Host about_Profiles about_Functions about_Scopes about_Debuggers about_Automatic_Variables