Freigeben über


Informationen zu Eingabeaufforderungen

Kurzbeschreibung

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:\>

Die PowerShell-Eingabeaufforderung Prompt wird durch die integrierte Funktion bestimmt. Sie können die Eingabeaufforderung anpassen, indem Sie eine eigene Prompt Funktion erstellen und in Ihrem PowerShell-Profil speichern.

Informationen zur Eingabeaufforderungsfunktion

Die funktion Prompt 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 Funktion Prompt weist die folgende Syntax auf:

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 maximale empfohlene Länge beträgt 80 Zeichen.

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

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

Abrufen der Eingabeaufforderungsfunktion

Um die Prompt-Funktion abzurufen, verwenden Sie das cmdlet Get-Command, oder verwenden Sie das cmdlet Get-Item im Funktionslaufwerk.

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.

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 im 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 Standardeingabeaufforderung 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 auf $nullfestgelegt, was ungültig ist. Daher wird die Standardaufforderung angezeigt.

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

Da PowerShell über eine integrierte Eingabeaufforderung verfügt, wird die Standardeingabeaufforderung in der Regel nicht angezeigt.

Integrierte Eingabeaufforderung

PowerShell enthält eine integrierte Prompt-Funktion.

function prompt {
    $(if (Test-Path variable:/PSDebugContext) { '[DBG]: ' }
      else { '' }) + 'PS ' + $(Get-Location) +
        $(if ($NestedPromptLevel -ge 1) { '>>' }) + '> '
}

Die Funktion verwendet das Test-Path Cmdlet, um zu bestimmen, ob die $PSDebugContext automatische Variable aufgefüllt wird. Wenn $PSDebugContext aufgefüllt ist, befinden Sie sich im Debugmodus und [DBG]: wird der Eingabeaufforderung wie folgt hinzugefügt:

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

Wenn $PSDebugContext nicht ausgefüllt ist, wird die Funktion zur Eingabeaufforderung hinzugefügt PS . Außerdem verwendet die Funktion das Cmdlet Get-Location, um den aktuellen Speicherort des Dateisystemverzeichnisses abzurufen. Anschließend wird eine rechtwinklige Klammer (>) hinzugefügt.

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 verschachtelten Eingabeaufforderung, wenn der Wert der $NestedPromptLevel automatischen Variablen größer als 1 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 cmdlet Enter-PSSession stellt den Namen des Remotecomputers der aktuellen Prompt-Funktion voran. Wenn Sie das Cmdlet Enter-PSSession verwenden, um eine Sitzung mit einem Remotecomputer zu starten, ändert sich die Eingabeaufforderung, um den Namen des Remotecomputers einzuschließen. 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, so dass 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 wird z. B. der integrierten PowerShell-Eingabeaufforderung hinzugefügt [ADMIN]: , wenn 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 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 Cmdlet Get-History, 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 die Cmdlets Write-Host und Get-Random, um eine Eingabeaufforderung zu erstellen, die die Farbe zufällig ändert. Da Write-Host in die aktuelle Hostanwendung geschrieben wird, aber kein Objekt zurückgegeben wird, 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

Get-Standort

Enter-PSSession

get-history

get-random

Schreib-Host

about_Profiles

about_Functions

about_Scopes

about_Debuggers

über_Automatische_Variablen