Sdílet prostřednictvím


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

Viz také