about_Prompts
Krátký popis
Popisuje Prompt
funkci a ukazuje, jak vytvořit vlastní Prompt
funkci.
Dlouhý popis
Příkazový řádek PowerShellu indikuje, že PowerShell je připravený ke spuštění příkazu:
PS C:\>
PowerShell má integrovanou Prompt
funkci. Ve skriptu profilu PowerShellu můžete definovat vlastní přizpůsobenou Prompt
funkci.
O funkci Prompt
Funkce Prompt
určuje vzhled příkazového řádku PowerShellu.
PowerShell obsahuje integrovanou Prompt
funkci, ale můžete ji přepsat definováním vlastní Prompt
funkce.
Funkce Prompt
má následující syntaxi:
function Prompt { <function-body> }
Funkce Prompt
musí vrátit objekt. Osvědčeným postupem je vrátit řetězec nebo objekt, který je formátovaný jako řetězec. Maximální doporučená délka je 80 znaků.
Například následující Prompt
funkce vrátí řetězec "Hello, World" následovaný pravou závorkou (>
).
PS C:\> function prompt {"Hello, World > "}
Hello, World >
Získání funkce Prompt
Pokud chcete funkci získat Prompt
, použijte rutinu Get-Command
nebo použijte rutinu Get-Item
na jednotce funkce.
Příklad:
PS C:\> Get-Command Prompt
CommandType Name ModuleName
----------- ---- ----------
Function prompt
Chcete-li získat skript, který nastaví hodnotu výzvy, pomocí tečky metoda získat ScriptBlock vlastnost Prompt
funkce.
Příklad:
(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
Stejně jako všechny funkce je tato funkce Prompt
uložena na jednotce Function:
.
Pokud chcete zobrazit skript, který vytvoří aktuální Prompt
funkci, zadejte:
(Get-Item function:prompt).ScriptBlock
Výchozí výzva
Výchozí výzva se zobrazí pouze v případě, že Prompt
funkce vygeneruje chybu nebo nevrací objekt.
Výchozí výzva PowerShellu je:
PS>
Například následující příkaz nastaví Prompt
funkci na $null
hodnotu , která je neplatná. V důsledku toho se zobrazí výchozí výzva.
PS C:\> function prompt {$null}
PS>
Vzhledem k tomu, že PowerShell obsahuje předdefinovaný příkazový řádek, obvykle se výchozí výzva nezobrazuje.
Předdefinovaná výzva
PowerShell obsahuje integrovanou Prompt
funkci.
function prompt {
"PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) ";
# .Link
# https://go.microsoft.com/fwlink/?LinkID=225750
# .ExternalHelp System.Management.Automation.dll-help.xml
}
Funkce pomocí rutiny Test-Path
otestuje, jestli $PSDebugContext
má automatická proměnná hodnotu. Pokud $PSDebugContext
má hodnotu, spouštíte v režimu ladění a [DBG]:
je přidán do příkazového řádku následujícím způsobem:
[DBG]: PS C:\ps-test>
Pokud $PSDebugContext
se nenaplní, funkce se přidá PS
do výzvy.
Funkce používá rutinu Get-Location
k získání aktuálního umístění adresáře systému souborů. Potom přidá pravý úhel závorky (>
).
Příklad:
PS C:\ps-test>
Pokud jste v vnořené výzvy, funkce přidá do výzvy dvě úhlové závorky (>>
). Pokud je hodnota $NestedPromptLevel
automatické proměnné větší než 0, zobrazí se vnořená výzva.
Například při ladění v vnořené výzvy se výzva podobá následující výzvě:
[DBG] PS C:\ps-test>>>
Změny výzvy
Rutina Enter-PSSession
předem předefinuje název vzdáleného počítače na aktuální Prompt
funkci. Když pomocí rutiny Enter-PSSession
spustíte relaci se vzdáleným počítačem, příkazový řádek se změní tak, aby obsahoval název vzdáleného počítače. Příklad:
PS Hello, World> Enter-PSSession Server01
[Server01]: PS Hello, World>
Jiné hostitelské aplikace PowerShellu a alternativní prostředí můžou mít vlastní příkazové řádky.
Další informace o proměnných $PSDebugContext
a $NestedPromptLevel
automatických proměnných najdete v tématu about_Automatic_Variables.
Postup přizpůsobení výzvy
Chcete-li přizpůsobit výzvu, napište novou Prompt
funkci. Funkce není chráněná, takže ji můžete přepsat.
Pokud chcete napsat Prompt
funkci, zadejte následující:
function prompt { }
Potom mezi složenými závorkami zadejte příkazy nebo řetězec, který vytvoří výzvu.
Například následující výzva obsahuje název počítače:
function prompt {"PS [$env:COMPUTERNAME]> "}
Na počítači Se server01 se výzva podobá následující výzvě:
PS [Server01] >
Prompt
Následující funkce obsahuje aktuální datum a čas:
function prompt {"$(Get-Date)> "}
Výzva se podobá následující výzvě:
03/15/2012 17:49:47>
Můžete také změnit výchozí Prompt
funkci:
Například následující upravená Prompt
funkce přidá [ADMIN]:
do předdefinované výzvy PowerShellu při spuštění v relaci se zvýšenými oprávněními.
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) { '>>' }) + '> '
}
Když spustíte PowerShell pomocí možnosti Spustit jako správce , zobrazí se výzva podobná následující výzvě:
[ADMIN]: PS C:\ps-test>
Následující Prompt
funkce zobrazí ID historie dalšího příkazu. Pokud chcete zobrazit historii příkazů, použijte rutinu Get-History
.
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 >"
}
Následující výzva použije Write-Host
rutiny Get-Random
k vytvoření výzvy, která náhodně změní barvu. Protože Write-Host
se zapisuje do aktuální hostitelské aplikace, ale nevrací objekt, tato funkce obsahuje Return
příkaz. Bez něj PowerShell používá výchozí výzvu PS>
.
function prompt {
$color = Get-Random -Min 1 -Max 16
Write-Host ("PS " + $(Get-Location) +">") -NoNewLine `
-ForegroundColor $Color
return " "
}
Uložení funkce Prompt
Stejně jako u jakékoli funkce Prompt
existuje funkce pouze v aktuální relaci. Pokud chcete funkci uložit Prompt
pro budoucí relace, přidejte ji do profilů PowerShellu. Další informace o profilech najdete v tématu about_Profiles.