Sdílet prostřednictvím


o_Příkazech

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 funkci Prompt. Vlastní funkci Prompt můžete definovat ve skriptu profilu PowerShellu.

O funkci Prompt

Funkce Prompt určuje vzhled příkazového řádku PowerShellu. PowerShell obsahuje integrovanou funkci Prompt, 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í funkce Prompt 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 získat funkci Prompt, použijte rutinu Get-Command nebo použijte rutinu Get-Item na jednotce function.

Napří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.

Napří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 funkce Prompt uložena na jednotce Function:. Pokud chcete zobrazit skript, který vytvoří aktuální funkci Prompt, 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í funkci Prompt na $null, což 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 funkci Prompt.

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 má $PSDebugContext automatická proměnná hodnotu. Pokud má $PSDebugContext hodnotu, spouštíte v režimu ladění a [DBG]: se do příkazového řádku přidá takto:

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

Pokud se $PSDebugContext nenaplní, funkce do výzvy přidá PS. Funkce používá rutinu Get-Location k získání aktuálního umístění adresáře systému souborů. Pak přidá pravou úhlovou závorku (>).

Například:

PS C:\ps-test>

Pokud jste ve vnořené výzvě, funkce přidá do příkazového řádku 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ředzálohuje název vzdáleného počítače na aktuální funkci Prompt. Když ke spuštění relace se vzdáleným počítačem použijete rutinu Enter-PSSession, příkazový řádek se změní tak, aby zahrnoval název vzdáleného počítače. Napří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 $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 funkci Prompt. 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] >

Následující Prompt 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žívá rutiny Write-Host a Get-Random k vytvoření výzvy, která náhodně změní barvu. Protože Write-Host zapisuje do aktuální hostitelské aplikace, ale nevrací objekt, zahrnuje tato funkce příkaz Return. 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 každá funkce existuje Prompt funkce pouze v aktuální relaci. Pokud chcete uložit funkci Prompt pro budoucí relace, přidejte ji do profilů PowerShellu. Další informace o profilech, viz about_Profiles.

Viz také