Share via


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

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 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 verfügt über die folgende Syntax:

function Prompt { <function-body> }

Die Prompt Funktion muss ein -Objekt zurückgeben. Es empfiehlt sich, 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, Welt" 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 das Get-Item Cmdlet 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 auf dem Function: Laufwerk gespeichert. Geben Sie Folgendes ein, um das Skript anzuzeigen, das die aktuelle Prompt Funktion erstellt:

(Get-Item function:prompt).ScriptBlock

Die Standardeingabeaufforderung

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

Die PowerShell-Standardaufforderung lautet:

PS>

Der folgende Befehl legt beispielsweise die Prompt Funktion auf $nullfest, die ungültig ist. Daraufhin wird die Standardaufforderung angezeigt.

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

Da PowerShell mit einer integrierten Eingabeaufforderung verfügt, wird die Standardeingabeaufforderung normalerweise 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]: werden der Eingabeaufforderung wie folgt hinzugefügt:

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

Wenn $PSDebugContext nicht aufgefüllt wird, fügt die Funktion der Eingabeaufforderung hinzu PS . Und die Funktion verwendet das Get-Location Cmdlet, um den aktuellen Verzeichnisspeicherort des Dateisystems abzurufen. Anschließend wird eine rechtwinklische Klammer (>) hinzugefügt.

Beispiel:

PS C:\ps-test>

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

Wenn Sie beispielsweise 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 so, dass sie den Namen des Remotecomputers enthält. 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 und $NestedPromptLevel automatischen $PSDebugContext 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 Klammern die Befehle oder die Zeichenfolge ein, die Ihre Eingabeaufforderung erstellt.

Die folgende Eingabeaufforderung enthält beispielsweise den Namen Ihres Computers:

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:

Beispielsweise fügt [ADMIN]: die folgende geänderte Prompt Funktion der integrierten PowerShell-Eingabeaufforderung hinzu, wenn PowerShell mit der Option Als Administrator ausführen geöffnet 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 Cmdlet, um den Get-History 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 Write-Host Cmdlets und Get-Random , um eine Eingabeaufforderung zu erstellen, die die Farbe zufällig ändert. Da Write-Host in die aktuelle Hostanwendung geschrieben, aber kein Objekt zurückgegeben wird, enthält diese Funktion eine Return -Anweisung. Ohne sie verwendet PowerShell die Standardeingabeaufforderung 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 Ihren PowerShell-Profilen hinzu. Weitere Informationen zu Profilen finden Sie unter about_Profiles.

Weitere Informationen