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.