about_Prompts
Krótki opis
Prompt
Opisuje funkcję i demonstruje sposób tworzenia funkcji niestandardowejPrompt
.
Długi opis
Wiersz polecenia programu PowerShell wskazuje, że program PowerShell jest gotowy do uruchomienia polecenia:
PS C:\>
Program PowerShell ma wbudowaną Prompt
funkcję. Własną niestandardową Prompt
funkcję można zdefiniować w skryscie profilu programu PowerShell.
Informacje o funkcji Prompt
Funkcja Prompt
określa wygląd wiersza polecenia programu PowerShell.
Program PowerShell jest dostarczany z wbudowaną Prompt
funkcją, ale można ją zastąpić, definiując własną Prompt
funkcję.
Funkcja Prompt
ma następującą składnię:
function Prompt { <function-body> }
Funkcja Prompt
musi zwrócić obiekt. Najlepszym rozwiązaniem jest zwrócenie ciągu lub obiektu sformatowanego jako ciąg. Maksymalna zalecana długość to 80 znaków.
Na przykład następująca Prompt
funkcja zwraca ciąg "Hello, World", po którym następuje prawy nawias kątowy (>
).
PS C:\> function prompt {"Hello, World > "}
Hello, World >
Pobieranie funkcji Prompt
Aby uzyskać Prompt
funkcję, użyj Get-Command
polecenia cmdlet lub użyj Get-Item
polecenia cmdlet na dysku funkcji.
Na przykład:
PS C:\> Get-Command Prompt
CommandType Name ModuleName
----------- ---- ----------
Function prompt
Aby uzyskać skrypt, który ustawia wartość monitu, użyj metody dot, aby uzyskać właściwość Prompt
ScriptBlock funkcji.
Na przykład:
(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
Podobnie jak wszystkie funkcje, Prompt
funkcja jest przechowywana na Function:
dysku.
Aby wyświetlić skrypt, który tworzy bieżącą Prompt
funkcję, wpisz:
(Get-Item function:prompt).ScriptBlock
Domyślny monit
Domyślny monit jest wyświetlany tylko wtedy, gdy Prompt
funkcja generuje błąd lub nie zwraca obiektu.
Domyślny monit programu PowerShell to:
PS>
Na przykład następujące polecenie ustawia Prompt
funkcję na $null
, która jest nieprawidłowa. W rezultacie zostanie wyświetlony domyślny monit.
PS C:\> function prompt {$null}
PS>
Ponieważ program PowerShell jest dostarczany z wbudowanym monitem, zwykle nie widzisz monitu domyślnego.
Wbudowany monit
Program PowerShell zawiera wbudowaną Prompt
funkcję.
function prompt {
"PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) ";
# .Link
# https://go.microsoft.com/fwlink/?LinkID=225750
# .ExternalHelp System.Management.Automation.dll-help.xml
}
Funkcja używa Test-Path
polecenia cmdlet do testowania, czy $PSDebugContext
zmienna automatyczna ma wartość. Jeśli $PSDebugContext
ma wartość, działasz w trybie debugowania i [DBG]:
jest dodawany do monitu w następujący sposób:
[DBG]: PS C:\ps-test>
Jeśli $PSDebugContext
ta funkcja nie zostanie wypełniona, zostanie dodany PS
do monitu.
Funkcja używa Get-Location
polecenia cmdlet , aby uzyskać bieżącą lokalizację katalogu systemu plików. Następnie dodaje prawy nawias kątowy (>
).
Na przykład:
PS C:\ps-test>
Jeśli jesteś w wierszu polecenia zagnieżdżonego, funkcja dodaje dwa nawiasy kątowe (>>
) do monitu. W wierszu polecenia zagnieżdżonego wartość zmiennej automatycznej $NestedPromptLevel
jest większa niż 0.
Na przykład podczas debugowania w wierszu polecenia zagnieżdżonego monit przypomina następujący monit:
[DBG] PS C:\ps-test>>>
Zmiany w wierszu polecenia
Polecenie Enter-PSSession
cmdlet poprzedza nazwę komputera zdalnego do bieżącej Prompt
funkcji. Gdy używasz Enter-PSSession
polecenia cmdlet do rozpoczęcia sesji z komputerem zdalnym, wiersz polecenia zmieni się w celu uwzględnienia nazwy komputera zdalnego. Na przykład:
PS Hello, World> Enter-PSSession Server01
[Server01]: PS Hello, World>
Inne aplikacje hosta programu PowerShell i alternatywne powłoki mogą mieć własne niestandardowe wiersze polecenia.
Aby uzyskać więcej informacji na temat $PSDebugContext
zmiennych automatycznych i, $NestedPromptLevel
zobacz about_Automatic_Variables.
Jak dostosować monit
Aby dostosować monit, napisz nową Prompt
funkcję. Funkcja nie jest chroniona, więc można ją zastąpić.
Aby napisać Prompt
funkcję, wpisz następujące polecenie:
function prompt { }
Następnie między nawiasami klamrowymi wprowadź polecenia lub ciąg, który tworzy wiersz.
Na przykład następujący monit zawiera nazwę komputera:
function prompt {"PS [$env:COMPUTERNAME]> "}
Na komputerze Server01 monit przypomina następujący monit:
PS [Server01] >
Następująca Prompt
funkcja zawiera bieżącą datę i godzinę:
function prompt {"$(Get-Date)> "}
Monit przypomina następujący monit:
03/15/2012 17:49:47>
Możesz również zmienić funkcję domyślną Prompt
:
Na przykład następująca zmodyfikowana Prompt
funkcja dodaje [ADMIN]:
do wbudowanego wiersza polecenia programu PowerShell podczas uruchamiania w sesji z podwyższonym poziomem uprawnień.
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) { '>>' }) + '> '
}
Po uruchomieniu programu PowerShell przy użyciu opcji Uruchom jako administrator zostanie wyświetlony monit podobny do następującego:
[ADMIN]: PS C:\ps-test>
Poniższa Prompt
funkcja wyświetla identyfikator historii następnego polecenia. Aby wyświetlić historię poleceń, użyj Get-History
polecenia cmdlet .
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 >"
}
Poniższy monit używa Write-Host
poleceń cmdlet i Get-Random
do utworzenia monitu, który losowo zmienia kolor. Ponieważ Write-Host
zapisuje w bieżącej aplikacji hosta, ale nie zwraca obiektu, ta funkcja zawiera instrukcję Return
. Bez niego program PowerShell używa domyślnego monitu. PS>
function prompt {
$color = Get-Random -Min 1 -Max 16
Write-Host ("PS " + $(Get-Location) +">") -NoNewLine `
-ForegroundColor $Color
return " "
}
Zapisywanie funkcji Prompt
Podobnie jak każda Prompt
funkcja, funkcja istnieje tylko w bieżącej sesji. Aby zapisać Prompt
funkcję dla przyszłych sesji, dodaj ją do profilów programu PowerShell. Aby uzyskać więcej informacji na temat profilów, zobacz about_Profiles.