about_Prompts

Kort beskrivning

Beskriver funktionen Prompt och visar hur du skapar en anpassad Prompt funktion.

Lång beskrivning

PowerShell-kommandotolken anger att PowerShell är redo att köra ett kommando:

PS C:\>

PowerShell-prompten bestäms av den inbyggda Prompt funktionen. Du kan anpassa prompten genom att skapa en egen Prompt funktion och spara den i din PowerShell-profil.

Om funktionen Prompt

Funktionen Prompt avgör utseendet på PowerShell-prompten. PowerShell levereras med en inbyggd Prompt funktion, men du kan åsidosätta den genom att definiera din egen Prompt funktion.

Funktionen Prompt har följande syntax:

function Prompt { <function-body> }

Funktionen Prompt måste returnera ett -objekt. Vi bör returnera en sträng eller ett objekt som är formaterat som en sträng. Den högsta rekommenderade längden är 80 tecken.

Till exempel returnerar följande funktion Prompt en "Hello, World"-sträng följt av en höger vinkelparentes ( > ).

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

Hämta funktionen Prompt

Hämta funktionen Prompt genom att använda Get-Command cmdleten eller Get-Item cmdleten i function-enheten.

Exempel:

PS C:\> Get-Command Prompt

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

Hämta skriptet som anger värdet för prompten med hjälp av dot-metoden för att hämta egenskapen ScriptBlock för Prompt funktionen.

Exempel:

(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

Precis som alla funktioner Prompt lagras funktionen på Function: enheten. Om du vill visa skriptet som skapar den Prompt aktuella funktionen skriver du:

(Get-Item function:prompt).ScriptBlock

Standarduppfråga

Standardmeddelandet visas bara Prompt när funktionen genererar ett fel eller inte returnerar ett -objekt.

Standardinställningen för PowerShell-prompten är:

PS>

Följande kommando anger till exempel funktionen Prompt till , vilket är $null ogiltigt. Därför visas standardmeddelandet.

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

Eftersom PowerShell levereras med en inbyggd prompt visas vanligtvis inte standarduppfråga.

Inbyggd prompt

PowerShell innehåller en inbyggd Prompt funktion.

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

Funktionen använder Test-Path cmdleten för att avgöra om $PSDebugContext den automatiska variabeln är ifylld. Om $PSDebugContext är ifylld är du i felsökningsläge och läggs [DBG]: till i prompten enligt följande:

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

Om $PSDebugContext inte har fyllts i läggs funktionen till PS i prompten. Och funktionen använder Get-Location cmdleten för att hämta den aktuella katalogplatsen för filsystemet. Sedan lägger den till en höger vinkelparentes ( > ).

Exempel:

PS C:\ps-test>

Om du är i en kapslad prompt lägger funktionen till två vinkelparenteser ( >> ) i prompten. (Du är i en kapslad prompt om värdet för den $NestedPromptLevel automatiska variabeln är större än 1.)

När du till exempel felsöker i en kapslad kommandotolk liknar prompten följande fråga:

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

Ändringar i prompten

Enter-PSSessionCmdleten förbereder namnet på fjärrdatorn till den aktuella Prompt funktionen. När du använder cmdleten för att starta en session med en fjärrdator ändras kommandotolken så att namnet Enter-PSSession på fjärrdatorn inkluderas. Exempel:

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

Andra PowerShell-värdprogram och alternativa gränssnitt kan ha egna anpassade kommandotolkar.

Mer information om och $PSDebugContext automatiska variabler finns i $NestedPromptLevel about_Automatic_Variables.

Anpassa prompten

Om du vill anpassa prompten skriver du en ny Prompt funktion. Funktionen är inte skyddad, så du kan skriva över den.

Skriv följande Prompt för att skriva en funktion:

function prompt { }

Ange sedan kommandona eller strängen som skapar prompten mellan kparenteserna.

Följande meddelande innehåller till exempel ditt datornamn:

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

På Server01-datorn liknar prompten följande prompt:

PS [Server01] >

Följande funktion Prompt innehåller aktuellt datum och tid:

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

Uppmaningen liknar följande prompt:

03/15/2012 17:49:47>

Du kan också ändra Prompt standardfunktionen:

Följande ändrade funktion lägger till exempel till i den Prompt inbyggda PowerShell-prompten när PowerShell öppnas med alternativet [ADMIN]: Kör som administratör:

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

När du startar PowerShell med alternativet Kör som administratör visas en uppmaning som liknar följande uppmaning:

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

Följande funktion Prompt visar historik-ID:t för nästa kommando. Om du vill visa kommandohistoriken använder du Get-History cmdleten .

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

Följande prompt använder Write-Host Get-Random cmdletarna och för att skapa en prompt som ändrar färg slumpmässigt. Eftersom Write-Host skriver till det aktuella värdprogrammet men inte returnerar ett objekt innehåller den här funktionen en Return -instruktion. Utan det använder PowerShell standard-prompten PS> .

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

Spara promptfunktionen

Precis som vilken funktion som Prompt helst finns funktionen bara i den aktuella sessionen. Om du vill Prompt spara funktionen för framtida sessioner lägger du till den i dina PowerShell-profiler. Mer information om profiler finns i about_Profiles.

Se även

Hämta plats

Enter-PSSession

Hämta historik

Get-Random

Write-Host

about_Profiles

about_Functions

about_Scopes

about_Debuggers

about_Automatic_Variables