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.