about_Prompts

Letzte Aktualisierung: Mai 2014

Betrifft: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

THEMA

about_Prompts

KURZE BESCHREIBUNG

Beschreibt die Funktion Prompt und veranschaulicht die Erstellung einer benutzerdefinierten Prompt-Funktion.

LANGE BESCHREIBUNG

Die Eingabeaufforderung (Prompt) von Windows PowerShell zeigt an, dass Windows PowerShell zur Ausführung eines Befehls bereit ist:

        PS C:\>

Die Eingabeaufforderung von Windows PowerShell wird durch die integrierte Prompt-Funktion gesteuert. Sie können die Eingabeaufforderung durch eine eigene Prompt-Funktion anpassen, die Sie in Ihrem Windows PowerShell-Profil speichern.

PROMPT-FUNKTION

Die Funktion Prompt bestimmt die Darstellung der Eingabeaufforderung von Windows PowerShell. Windows PowerShell verfügt über eine integrierte Prompt-Funktion, die Sie jedoch durch Definition einer eigenen Prompt-Funktion überschreiben können.

Die Prompt-Funktion hat folgende Syntax:

        function Prompt { <function-body> }

Die Prompt-Funktion muss ein Objekt zurückgeben. 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.

Die folgende Prompt-Funktion gibt zum Beispiel die Zeichenfolge "Hello, World" gefolgt von einer Einfügemarke (>) zurück.

        PS C:\> function prompt {"Hello, World > "}
        Hello, World > 

ABRUFEN DER PROMPT-FUNKTION

Den Code der aktuellen Prompt-Funktion können Sie mit dem Cmdlet Get-Command bzw. Get-Item aus dem Laufwerk Function: abrufen.

Funktionen sind Befehle. Daher können Sie mit dem Cmdlet Get-Command auch Funktionen, einschließlich der Prompt-Funktion, abrufen.

Beispiel:

        PS C:\>Get-Command Prompt

        CommandType     Name                                               ModuleName
        -----------     ----                                               ----------
        Function        prompt
        

Zum Abrufen des Skripts, das den Wert der Eingabeaufforderung festlegt, verwenden Sie die Punktmethode. Mit dieser rufen Sie die Eigenschaft ScriptBlock der Prompt-Funktion ab.

Beispiel:

        PS C:\>(Get-Command Prompt).ScriptBlock

        "PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) "
        # .Link
        # https://go.microsoft.com/fwlink/?LinkID=225750
        # .ExternalHelp System.Management.Automation.dll-help.xml

Wie alle Funktionen wird auch die Prompt-Funktion im Laufwerk Function: gespeichert. Um das Skript anzuzeigen, das die aktuelle Prompt-Funktion erstellt, geben Sie Folgendes ein:

        (Get-Item function:prompt).ScriptBlock

STANDARDEINGABEAUFFORDERUNG

Die Standardeingabeaufforderung wird nur angezeigt, wenn die Prompt-Funktion einen Fehler generiert oder kein Objekt zurückgibt.

Die Standardeingabeaufforderung von Windows PowerShell lautet wie folgt:

        PS>

Beispielsweise setzt der folgende Befehl die Prompt-Funktion auf $null, was ungültig ist. Daher wird die Standardeingabeaufforderung angezeigt.

        PS C:\> function prompt {$null}
        PS>

Da Windows PowerShell über eine integrierte Eingabeaufforderung verfügt, wird die Standardeingabeaufforderung normalerweise nicht angezeigt.

INTEGRIERTE EINGABEAUFFORDERUNG

Windows PowerShell enthält eine integrierte Prompt-Funktion.

In Windows PowerShell 3.0 lautet die integrierte Prompt-Funktion wie folgt:

        function prompt
        {
            "PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) "
        }

Diese vereinfachte Eingabeaufforderung beginnt mit "PS" gefolgt von der aktuellen Position und einem ">" für jede verschachtelte Prompt-Ebene.

In Windows PowerShell 2,0 lautet die integrierte Prompt-Funktion 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 gefüllt wird. Wenn $PSDebugContext gefüllt ist, wird der Debugmodus verwendet und der Eingabeaufforderung wird "[DBG]" hinzugefügt, wie nachfolgend gezeigt:

        [DBG] PS C:\ps-test>

Wenn $PSDebugContext nicht gefüllt ist, fügt die Funktion der Eingabeaufforderung "PS" hinzu. Außerdem ruft die Funktion mit dem Cmdlet Get-Location die aktuelle Verzeichnisposition im Dateisystem ab. Anschließend wird eine schließende spitze Klammer (>) hinzugefügt.

    For example:        
        PS C:\ps-test>

In einer verschachtelten Eingabeaufforderung werden der Eingabeaufforderung von der Funktion zwei spitze Klammern (>>) hinzugefügt. (Bei einer verschachtelten Eingabeaufforderung weist die automatische Variable $NestedPromptLevel einen Wert größer als 1 auf.)

Wenn Sie beispielsweise in einer verschachtelten Eingabeaufforderung debuggen, sieht die Eingabeaufforderung ungefähr wie folgt aus:

        [DBG] PS C:\ps-test>>>

ÄNDERUNGEN AN DER EINGABEAUFFORDERUNG

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, enthält die Eingabeaufforderung auch den Namen des Remotecomputers. Beispiel:

          PS Hello, World> Enter-PSSession Server01
          [Server01]: PS Hello, World>

Andere Windows PowerShell-Hostanwendungen und alternative Shells weisen möglicherweise eigene benutzerdefinierte Eingabeaufforderungen auf.

Weitere Informationen zu den automatischen Variablen $PSDebugContext und $NestedPromptLevel finden Sie unter "about_Automatic_Variables".

ANPASSEN DER EINGABEAUFFORDERUNG

Zum Anpassen der Eingabeaufforderung schreiben Sie eine neue Prompt-Funktion. Die Funktion ist nicht geschützt, sie kann daher überschrieben werden.

Zum Schreiben einer Prompt-Funktion geben Sie Folgendes ein:

        function prompt { }

Geben Sie anschließend zwischen den geschweiften Klammern die Befehle oder die Zeichenfolge ein, mit denen die Eingabeaufforderung 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 in etwa wie folgt aus:

        03/15/2012 17:49:47>

Sie können auch die Prompt-Standardfunktion ändern:

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
          {
             # The at sign creates an array in case only one history item exists.
             $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 der Cmdlets Write-Host und 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 PROMPT-FUNKTION

Wie alle Funktionen wirkt sich die Prompt-Funktion nur auf die aktuelle Sitzung aus. Um die Prompt-Funktion für zukünftige Sitzungen zu speichern, fügen Sie sie Ihren Windows PowerShell-Profilen hinzu. Weitere Informationen hierzu 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