about_Prompts

Kurze Beschreibung

Beschreibt die Prompt Funktion und veranschaulicht, wie eine benutzerdefinierte Prompt Funktion erstellt wird.

Lange Beschreibung

Die PowerShell-Eingabeaufforderung gibt an, dass PowerShell bereit ist, einen Befehl auszuführen:

PS C:\>

PowerShell verfügt über eine integrierte Prompt Funktion. Sie können Ihre eigene benutzerdefinierte Prompt Funktion in Ihrem PowerShell-Profilskript definieren.

Informationen zur Eingabeaufforderungsfunktion

Die Prompt Funktion bestimmt die Darstellung der PowerShell-Eingabeaufforderung. PowerShell verfügt über eine integrierte Prompt Funktion, aber Sie können sie überschreiben, indem Sie Ihre eigene Prompt Funktion definieren.

Die Prompt Funktion weist die folgende Syntax auf:

function Prompt { <function-body> }

Die Prompt Funktion muss ein Objekt zurückgeben. Als bewährte Methode geben Sie eine Zeichenfolge oder ein Objekt zurück, das als Zeichenfolge formatiert ist. Die maximale empfohlene Länge beträgt 80 Zeichen.

Beispielsweise gibt die folgende Prompt Funktion eine Zeichenfolge "Hello, World" gefolgt von einer rechtwinkligen Klammer (>) zurück.

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

Abrufen der Eingabeaufforderungsfunktion

Verwenden Sie zum Abrufen der Prompt Funktion das Get-Command Cmdlet, oder verwenden Sie das Get-Item Cmdlet auf dem Funktionslaufwerk.

Zum Beispiel:

PS C:\> Get-Command Prompt

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

Um das Skript abzurufen, das den Wert der Eingabeaufforderung festlegt, verwenden Sie die Dot-Methode, um die ScriptBlock-Eigenschaft der Prompt Funktion abzurufen.

Zum Beispiel:

(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 die Prompt Funktion auf dem Function: Laufwerk gespeichert. Um das Skript anzuzeigen, das die aktuelle Prompt Funktion erstellt, geben Sie Folgendes ein:

(Get-Item function:prompt).ScriptBlock

Die Standardaufforderung

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

Die PowerShell-Standardaufforderung lautet:

PS>

Mit dem folgenden Befehl wird beispielsweise die Prompt Funktion festgelegt $null, die ungültig ist. Daher wird die Standardaufforderung angezeigt.

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

Da PowerShell mit einer integrierten Eingabeaufforderung enthalten ist, wird in der Regel die Standardaufforderung nicht angezeigt.

Integrierte Eingabeaufforderung

PowerShell enthält eine integrierte Prompt Funktion.

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

Die Funktion verwendet das Test-Path Cmdlet, um zu testen, ob die $PSDebugContext automatische Variable einen Wert aufweist. Wenn $PSDebugContext ein Wert vorhanden ist, werden Sie im Debugmodus ausgeführt und [DBG]: der Eingabeaufforderung wie folgt hinzugefügt:

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

Ist $PSDebugContext dies nicht aufgefüllt, wird der Eingabeaufforderung die Funktion hinzugefügt PS . Und die Funktion verwendet das Get-Location Cmdlet, um den aktuellen Speicherort des Dateisystemverzeichnisses abzurufen. Anschließend wird eine rechtwinklige Klammer (>) hinzugefügt.

Zum Beispiel:

PS C:\ps-test>

Wenn Sie sich in einer geschachtelten Eingabeaufforderung befinden, fügt die Funktion der Eingabeaufforderung zwei winkelige Klammern (>>) hinzu. Sie befinden sich in einer geschachtelten Eingabeaufforderung, wenn der Wert der $NestedPromptLevel automatischen Variablen größer als 0 ist.

Wenn Sie z. B. in einer geschachtelten Eingabeaufforderung debuggen, ähnelt die Eingabeaufforderung der folgenden Eingabeaufforderung:

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

Änderungen an der Eingabeaufforderung

Das Enter-PSSession Cmdlet stellt den Namen des Remotecomputers der aktuellen Prompt Funktion voran. Wenn Sie das Enter-PSSession Cmdlet verwenden, um eine Sitzung mit einem Remotecomputer zu starten, ändert sich die Eingabeaufforderung, um den Namen des Remotecomputers einzuschließen. Zum Beispiel:

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

Andere PowerShell-Hostanwendungen und alternative Shells verfügen möglicherweise über eigene benutzerdefinierte Eingabeaufforderungen.

Weitere Informationen zu den $PSDebugContext und $NestedPromptLevel automatischen Variablen 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, sodass Sie sie überschreiben können.

Geben Sie Folgendes ein, um eine Prompt Funktion zu schreiben:

function prompt { }

Geben Sie dann zwischen den geschweiften Klammern die Befehle oder die Zeichenfolge ein, die Ihre Eingabeaufforderung erstellt.

Die folgende Eingabeaufforderung enthält beispielsweise Ihren Computernamen:

function prompt {"PS [$env:COMPUTERNAME]> "}

Auf dem Server01-Computer ähnelt die Eingabeaufforderung der folgenden Eingabeaufforderung:

PS [Server01] >

Die folgende Prompt Funktion enthält das aktuelle Datum und die aktuelle Uhrzeit:

function prompt {"$(Get-Date)> "}

Die Eingabeaufforderung ähnelt der folgenden Eingabeaufforderung:

03/15/2012 17:49:47>

Sie können auch die Standardfunktion Prompt ändern:

Die folgende geänderte Prompt Funktion fügt [ADMIN]: beispielsweise der integrierten PowerShell-Eingabeaufforderung hinzu, wenn sie in einer Sitzung mit erhöhten Rechten ausgeführt wird.

function prompt {
  $identity = [Security.Principal.WindowsIdentity]::GetCurrent()
  $principal = [Security.Principal.WindowsPrincipal] $identity
  $adminRole = [Security.Principal.WindowsBuiltInRole]::Administrator

  $(if (Test-Path variable:/PSDebugContext) { '[DBG]: ' }
    elseif($principal.IsInRole($adminRole)) { "[ADMIN]: " }
    else { '' }
  ) + 'PS ' + $(Get-Location) +
    $(if ($NestedPromptLevel -ge 1) { '>>' }) + '> '
}

Wenn Sie PowerShell mit der Option "Als Administrator ausführen" starten, wird eine Eingabeaufforderung angezeigt, die der folgenden Eingabeaufforderung ähnelt:

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

Die folgende Prompt Funktion zeigt die Verlaufs-ID des nächsten Befehls an. Verwenden Sie das Get-History Cmdlet, um den Befehlsverlauf anzuzeigen.

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 verwendet und Write-Host Get-Random Cmdlets, um eine Eingabeaufforderung zu erstellen, die die Farbe zufällig ändert. Da Write-Host Schreibvorgänge in die aktuelle Hostanwendung, aber kein Objekt zurückgegeben werden, enthält diese Funktion eine Return Anweisung. Ohne dies verwendet PowerShell die Standardaufforderung. PS>

function prompt {
    $color = Get-Random -Min 1 -Max 16
    Write-Host ("PS " + $(Get-Location) +">") -NoNewLine `
     -ForegroundColor $Color
    return " "
}

Speichern der Eingabeaufforderungsfunktion

Wie jede Funktion ist die Prompt Funktion nur in der aktuellen Sitzung vorhanden. Um die Prompt Funktion für zukünftige Sitzungen zu speichern, fügen Sie sie zu Ihren PowerShell-Profilen hinzu. Weitere Informationen zu Profilen finden Sie unter about_Profiles.

Siehe auch