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 har en inbyggd Prompt
funktion. Du kan definiera din egen anpassade Prompt
funktion i powershell-profilskriptet.
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 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 en "Hello, World"-sträng följt av en höger vinkelparentes (>
).
PS C:\> function prompt {"Hello, World > "}
Hello, World >
Hämta funktionen Prompt
Om du vill hämta Prompt
funktionen använder du cmdleten Get-Command
eller använder cmdleten Get-Item
på funktionsenheten.
Till exempel:
PS C:\> Get-Command Prompt
CommandType Name ModuleName
----------- ---- ----------
Function prompt
Om du vill hämta skriptet som anger värdet för kommandotolken använder du dot-metoden för att hämta egenskapen ScriptBlock för Prompt
funktionen.
Till 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 fråga ser du vanligtvis inte standardprompten.
Inbyggd prompt
PowerShell innehåller en inbyggd Prompt
funktion.
function prompt {
"PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) ";
# .Link
# https://go.microsoft.com/fwlink/?LinkID=225750
# .ExternalHelp System.Management.Automation.dll-help.xml
}
Funktionen använder cmdleten Test-Path
för att testa om den $PSDebugContext
automatiska variabeln har ett värde. Om $PSDebugContext
har ett värde körs 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 (>
).
Till exempel:
PS C:\ps-test>
Om du är i en kapslad fråga 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 0.
När du till exempel felsöker i en kapslad fråga liknar uppmaningen följande fråga:
[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. Till exempel:
PS Hello, World> Enter-PSSession Server01
[Server01]: PS Hello, World>
Andra PowerShell-värdprogram och alternativa gränssnitt kan ha egna anpassade kommandotolk.
Mer information om $PSDebugContext
och $NestedPromptLevel
automatiska variabler finns i about_Automatic_Variables.
Så här anpassar du 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 din fråga.
Följande fråga innehåller till exempel datornamnet:
function prompt {"PS [$env:COMPUTERNAME]> "}
På Server01-datorn liknar uppmaningen följande fråga:
PS [Server01] >
Prompt
Följande funktion innehåller aktuellt datum och tid:
function prompt {"$(Get-Date)> "}
Uppmaningen liknar följande fråga:
03/15/2012 17:49:47>
Du kan också ändra standardfunktionen Prompt
:
Till exempel lägger [ADMIN]:
följande ändrade Prompt
funktion till den inbyggda PowerShell-prompten när den körs i en upphöjd session.
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 fråga:
[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 fråga använder Write-Host
cmdletarna och Get-Random
för att skapa en fråga 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 funktionen Prompt
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.