Delen via


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

PowerShell heeft een ingebouwde Prompt functie. U kunt uw eigen aangepaste Prompt functie definiƫren in uw PowerShell-profielscript.

Over de functie Prompt

De Prompt functie 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 Prompt functie heeft de volgende syntaxis:

function Prompt { <function-body> }

De Prompt functie moet een object retourneren. Als best practice kunt u een tekenreeks of een object retourneren dat 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 rechts (>).

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

De functie Prompt verkrijgen

Als u de Prompt functie wilt ophalen, gebruikt u de Get-Command cmdlet of gebruikt u de Get-Item cmdlet in het functiestation.

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 Prompt functie 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 het Function: station. Als u het script wilt weergeven waarmee de huidige Prompt functie wordt gemaakt, typt u:

(Get-Item function:prompt).ScriptBlock

De standaardprompt

De standaardprompt wordt alleen weergegeven wanneer de Prompt functie een fout genereert of geen object retourneert.

De standaard powerShell-prompt is:

PS>

Met de volgende opdracht wordt de Prompt functie bijvoorbeeld ingesteld $nullop , 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 {
  "PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) ";
  # .Link
  # https://go.microsoft.com/fwlink/?LinkID=225750
  # .ExternalHelp System.Management.Automation.dll-help.xml
}

De functie gebruikt de Test-Path cmdlet om te testen of de $PSDebugContext automatische variabele een waarde heeft. Als $PSDebugContext er een waarde is, wordt u uitgevoerd in de foutopsporingsmodus en [DBG]: wordt u als volgt toegevoegd aan de prompt:

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

Als $PSDebugContext deze niet is ingevuld, wordt de functie toegevoegd PS aan de prompt. En de functie gebruikt de Get-Location cmdlet om de huidige locatie van de bestandssysteemmap op te halen. Vervolgens wordt er een vierkante haak rechts (>) 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 als de waarde van de $NestedPromptLevel automatische variabele groter is dan 0.

Wanneer u bijvoorbeeld fouten in een geneste prompt opspoort, lijkt de prompt op de volgende prompt:

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

Wijzigingen in de prompt

De Enter-PSSession cmdlet prependeert de naam van de externe computer naar de huidige Prompt functie. Wanneer u de Enter-PSSession cmdlet gebruikt om een sessie met een externe computer te starten, verandert de opdrachtprompt zodat deze de naam van de externe computer bevat. Voorbeeld:

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

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

Zie about_Automatic_Variables voor meer informatie over de $PSDebugContext en $NestedPromptLevel automatische variabelen.

De prompt aanpassen

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

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

function prompt { }

Voer vervolgens tussen de accolades de opdrachten of de tekenreeks in waarmee de prompt wordt gemaakt.

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 deze wordt uitgevoerd in een sessie met verhoogde bevoegdheid.

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 de optie Uitvoeren als administrator , wordt er een prompt weergegeven die lijkt op de volgende prompt:

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

Met de volgende Prompt functie wordt de geschiedenis-id van de volgende opdracht weergegeven. Gebruik de cmdlet om de Get-History 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 Write-Host en Get-Random cmdlets gebruikt om een prompt te maken waarmee de kleur willekeurig wordt gewijzigd. Omdat Write-Host schrijft naar de huidige hosttoepassing, maar geen object retourneert, bevat deze functie een Return instructie. Zonder dit 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 functie wilt opslaan voor toekomstige sessies, voegt u deze Prompt toe aan uw PowerShell-profielen. Zie about_Profiles voor meer informatie over profielen.

Zie ook