Freigeben über


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 enthält 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. 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 "Hello, Welt"-Zeichenfolge gefolgt von einer rechten eckigen 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 Standardmäßige PowerShell-Eingabeaufforderung lautet:

PS>

Der folgende Befehl legt z. B. die Prompt Funktion auf fest $null, die ungültig ist. Daher wird die Standardaufforderung angezeigt.

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

Da PowerShell eine integrierte Eingabeaufforderung enthält, wird die Standardaufforderung in der Regel 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 über einen Wert verfügt, werden Sie im Debugmodus ausgeführt und [DBG]: der Eingabeaufforderung wie folgt hinzugefügt:

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

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

Beispiel:

PS C:\ps-test>

Wenn Sie sich in einer geschachtelten Eingabeaufforderung befinden, fügt die Funktion der Eingabeaufforderung zwei spitzen 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 $PSDebugContext automatischen Variablen und $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, sodass Sie sie überschreiben können.

Um eine Prompt Funktion zu schreiben, geben Sie Folgendes ein:

function prompt { }

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

Die folgende Eingabeaufforderung enthält z. B. 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 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 Aufforderung ä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 nach dem Zufallsprinzip ä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 andere 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