Dela via


Om frågor

Kort beskrivning

Beskriver Prompt funktionen 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 promptfunktionen

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 rekommenderar att du returnerar en sträng eller ett objekt som är formaterat som en sträng. Den maximala rekommenderade längden är 80 tecken.

Följande Prompt funktion returnerar till exempel strängen "Hello, World" följt av en höger vinkelparentes (>).

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

Hämta promptfunktionen

Om du vill hämta Prompt funktionen använder du cmdleten Get-Command eller cmdleten Get-Item på funktionsenheten.

Exempel:

PS C:\> Get-Command Prompt

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

Om du vill hämta skriptet som anger värdet för prompten använder du dot-metoden för att hämta scriptblock-egenskapen 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 aktuella Prompt funktionen skriver du:

(Get-Item function:prompt).ScriptBlock

Standardprompten

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

Standardprompten för PowerShell är:

PS>

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

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

Eftersom PowerShell levereras med en inbyggd prompt ser du vanligtvis inte standardprompten.

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 cmdleten Test-Path för att avgöra om den $PSDebugContext automatiska variabeln är ifylld. Om $PSDebugContext har fyllts i är du i felsökningsläge och [DBG]: läggs till i prompten enligt följande:

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

Om $PSDebugContext inte har fyllts i läggs PS funktionen till i prompten. Och funktionen använder cmdleten Get-Location för att hämta den aktuella platsen för filsystemets katalog. 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 fråga om värdet för den $NestedPromptLevel automatiska variabeln är större än 1.)

När du till exempel felsöker i en kapslad prompt liknar prompten följande prompt:

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

Ändringar i prompten

Cmdleten Enter-PSSession förbereder namnet på fjärrdatorn till den aktuella Prompt funktionen. När du använder cmdleten Enter-PSSession för att starta en session med en fjärrdator ändras kommandotolken så att namnet 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 kommandotolks.

Mer information om $PSDebugContext och $NestedPromptLevel automatiska variabler finns i 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 för att skriva en Prompt funktion:

function prompt { }

Mellan klammerparenteserna anger du sedan kommandona eller strängen som skapar prompten.

Följande prompt innehåller till exempel datornamnet:

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

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

PS [Server01] >

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

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

Prompten liknar följande uppmaning:

03/15/2012 17:49:47>

Du kan också ändra standardfunktionen Prompt :

Följande ändrade Prompt funktion lägger [ADMIN]: till exempel till den inbyggda PowerShell-prompten när PowerShell öppnas med alternativet 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 Prompt funktion visar historik-ID för nästa kommando. Om du vill visa kommandohistoriken använder du cmdleten 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 >"
}

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

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

Spara promptfunktionen

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

Se även

Get-Location

Enter-PSSession

Get-History

Get-Random

Write-Host

about_Profiles

about_Functions

about_Scopes

about_Debuggers

about_Automatic_Variables