about_Prompts

Krátký popis

Popisuje Prompt funkci a ukazuje, jak vytvořit vlastní Prompt funkci.

Dlouhý popis

Příkazový řádek PowerShellu označuje, že PowerShell je připravený ke spuštění příkazu:

PS C:\>

Příkazový řádek PowerShellu určuje integrovaná Prompt funkce. Výzvu můžete přizpůsobit tak, že vytvoříte vlastní Prompt funkci a uložíte ji v profilu PowerShellu.

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 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

K získání Prompt funkce použijte rutinu Get-Command nebo použijte rutinu Get-Item na jednotce function.

Příklad:

PS C:\> Get-Command Prompt

CommandType     Name      ModuleName
-----------     ----      ----------
Function        prompt

Chcete-li získat skript, který nastaví hodnotu výzvy, použijte metodu tečka 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 uložená Prompt na jednotce Function: . Chcete-li 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, 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ý řádek, obvykle se výchozí výzva nezobrazuje.

Předdefinovaná výzva

PowerShell obsahuje integrovanou Prompt funkci.

function prompt {
    $(if (Test-Path variable:/PSDebugContext) { '[DBG]: ' }
      else { '' }) + 'PS ' + $(Get-Location) +
        $(if ($NestedPromptLevel -ge 1) { '>>' }) + '> '
}

Funkce pomocí rutiny Test-Path určí, jestli $PSDebugContext je automatická proměnná naplněna. Pokud $PSDebugContext se naplní, jste v režimu ladění a [DBG]: přidá se do příkazového řádku následujícím způsobem:

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

Pokud $PSDebugContext není vyplněna, 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ů. Pak přidá pravou úhlovou závorku (>).

Pří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ř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 $PSDebugContext proměnných a $NestedPromptLevel automatických proměnných najdete v tématu about_Automatic_Variables.

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ří vaši výzvu.

Například následující výzva obsahuje název počítače:

function prompt {"PS [$env:COMPUTERNAME]> "}

Na počítači 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:

Následující upravená Prompt funkce například přidá [ADMIN]: do integrované výzvy PowerShellu při otevření PowerShellu pomocí možnosti Spustit jako správce :

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 k Get-Random vytvoření výzvy, která náhodně změní barvu. Protože Write-Host zapisuje do aktuální hostitelské aplikace, ale nevrací objekt, tato funkce obsahuje Return příkaz. Bez něj PowerShell použije 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 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.

Viz také