Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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.
Informace o prompt funkci
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 $nullhodnotu , 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.