about_Prompts

Korte beschrijving

Beschrijft de Prompt functie en laat zien hoe u een aangepaste Prompt-functie maakt.

Lange beschrijving

De PowerShell-opdrachtprompt geeft aan dat PowerShell gereed is om een opdracht uit te voeren:

PS C:\>

De PowerShell-prompt Prompt wordt bepaald door de ingebouwde functie. U kunt de prompt aanpassen door uw eigen Prompt functie te maken en deze op te slaan in uw PowerShell-profiel.

Over de functie Prompt

De functie Prompt bepaalt het uiterlijk van de PowerShell-prompt. PowerShell wordt geleverd met een ingebouwde Prompt functie, maar u kunt deze overschrijven door uw eigen Prompt functie te definiƫren.

De functie Prompt heeft de volgende syntaxis:

function Prompt { <function-body> }

De functie Prompt moet een object retourneren. U kunt het beste een tekenreeks of object retourneren die is opgemaakt als een tekenreeks. De maximale aanbevolen lengte is 80 tekens.

Met de volgende Prompt functie wordt bijvoorbeeld een tekenreeks 'Hallo, wereld' geretourneerd, gevolgd door een vierkante haak (>).

PS C:\> function prompt {"Hello, World > "}
Hello, World >

De functie Prompt verkrijgen

Om de functie Prompt op te halen, gebruikt u de cmdlet Get-Command of de cmdlet Get-Item in de functieschijf.

Voorbeeld:

PS C:\> Get-Command Prompt

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

Als u het script wilt ophalen waarmee de waarde van de prompt wordt ingesteld, gebruikt u de puntmethode om de eigenschap ScriptBlock van de functie Prompt op te halen.

Voorbeeld:

(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

Net als alle functies wordt de Prompt functie opgeslagen in de Function: schijf. Als u het script wilt weergeven waarmee de huidige Prompt functie wordt gemaakt, typt u:

(Get-Item function:prompt).ScriptBlock

De standaardprompt

De standaardprompt verschijnt alleen wanneer de Prompt functie een fout genereert of een object niet retourneert.

De standaard powerShell-prompt is:

PS>

Met de volgende opdracht wordt de functie Prompt bijvoorbeeld ingesteld op $null, wat ongeldig is. Als gevolg hiervan wordt de standaardprompt weergegeven.

PS C:\> function prompt {$null}
PS>

Omdat PowerShell wordt geleverd met een ingebouwde prompt, ziet u meestal niet de standaardprompt.

Ingebouwde prompt

PowerShell bevat een ingebouwde Prompt-functie.

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

De functie gebruikt de Test-Path cmdlet om te bepalen of de $PSDebugContext automatische variabele wordt ingevuld. Als $PSDebugContext is ingevuld, bevindt u zich in de foutopsporingsmodus en [DBG]: wordt u als volgt aan de prompt toegevoegd:

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

Als $PSDebugContext deze functie niet is ingevuld, wordt deze toegevoegd aan PS de prompt. En de functie gebruikt de Get-Location cmdlet om de huidige locatie van de bestandssysteemmap op te halen. Vervolgens wordt er een rechte hoekige haak (>) toegevoegd.

Voorbeeld:

PS C:\ps-test>

Als u zich in een geneste prompt bevindt, voegt de functie twee punthaken (>>) toe aan de prompt. U bevindt zich in een geneste prompt wanneer de waarde van de automatische variabele $NestedPromptLevel groter is dan 0.

Wanneer u bijvoorbeeld aan het debuggen bent in een geneste prompt, lijkt de prompt op een prompt zoals de volgende:

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

Wijzigingen in de prompt

De Enter-PSSession-cmdlet voegt de naam van de externe computer toe aan het begin van de huidige Prompt-functie. Wanneer u de cmdlet Enter-PSSession gebruikt om een sessie met een externe computer te starten, verandert de opdrachtprompt om de naam van de externe computer op te nemen. Voorbeeld:

PS Hello, World> Enter-PSSession Server01
[Server01]: PS Hello, World>

Andere PowerShell-hosttoepassingen en alternatieve shells hebben mogelijk hun eigen aangepaste opdrachtprompts.

Zie $PSDebugContextvoor meer informatie over de $NestedPromptLevel en automatische variabelen.

De prompt aanpassen

Als u de prompt wilt aanpassen, schrijft u een nieuwe Prompt-functie. De functie is niet beveiligd, dus je kunt deze overschrijven.

Als u een Prompt-functie wilt schrijven, typt u het volgende:

function prompt { }

Voer vervolgens tussen de accolades de opdrachten of een tekenreeks in waarmee je de prompt maakt.

De volgende prompt bevat bijvoorbeeld de computernaam:

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

Op de Server01-computer lijkt de prompt op de volgende prompt:

PS [Server01] >

De volgende Prompt functie bevat de huidige datum en tijd:

function prompt {"$(Get-Date)> "}

De prompt lijkt op de volgende prompt:

03/15/2012 17:49:47>

U kunt ook de standaardfunctie Prompt wijzigen:

De volgende gewijzigde Prompt functie wordt bijvoorbeeld toegevoegd [ADMIN]: aan de ingebouwde PowerShell-prompt wanneer PowerShell wordt geopend met behulp van de optie Uitvoeren als beheerder :

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) { '>>' }) + '> '
}

Wanneer u PowerShell start met behulp van de optie Uitvoeren als beheerder , wordt een prompt weergegeven die lijkt op de volgende prompt:

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

In de volgende Prompt functie wordt de geschiedenis-id van de volgende opdracht weergegeven. Gebruik de cmdlet Get-History om de opdrachtgeschiedenis weer te geven.

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

In de volgende prompt worden de cmdlets Write-Host en Get-Random gebruikt om een prompt te maken waarmee de kleur willekeurig wordt gewijzigd. Omdat Write-Host er naar de huidige hosttoepassing wordt geschreven, maar geen object wordt geretourneerd, bevat deze functie een Return instructie. Zonder deze gebruikt PowerShell de standaardprompt, PS>.

function prompt {
    $color = Get-Random -Min 1 -Max 16
    Write-Host ("PS " + $(Get-Location) +">") -NoNewLine `
     -ForegroundColor $Color
    return " "
}

De functie Prompt opslaan

Net als elke functie bestaat de Prompt functie alleen in de huidige sessie. Als u de Prompt-functie wilt opslaan voor toekomstige sessies, voegt u deze toe aan uw PowerShell-profielen. Zie about_Profilesvoor meer informatie over profielen.

Zie ook