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:\>
Wiersz polecenia programu PowerShell jest określany przez wbudowaną Prompt
funkcję. Możesz dostosować monit, tworząc własną Prompt
funkcję i zapisując ją w 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 poniższa 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.
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.
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 tworzący bieżącą Prompt
funkcję, wpisz:
(Get-Item function:prompt).ScriptBlock
Monit domyślny
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 monit domyślny.
PS C:\> function prompt {$null}
PS>
Ponieważ program PowerShell jest dostarczany z wbudowanym monitem, zazwyczaj nie jest wyświetlany monit domyślny.
Wbudowany monit
Program PowerShell zawiera wbudowaną Prompt
funkcję.
function prompt {
$(if (Test-Path variable:/PSDebugContext) { '[DBG]: ' }
else { '' }) + 'PS ' + $(Get-Location) +
$(if ($NestedPromptLevel -ge 1) { '>>' }) + '> '
}
Funkcja używa Test-Path
polecenia cmdlet , aby określić, czy zmienna automatyczna $PSDebugContext
jest wypełniana. Jeśli $PSDebugContext
pole jest wypełnione, jesteś w trybie debugowania i [DBG]:
jest dodawane do monitu w następujący sposób:
[DBG]: PS C:\ps-test>
Jeśli $PSDebugContext
pole nie zostanie wypełnione, funkcja zostanie dodany PS
do wiersza polecenia.
Funkcja używa Get-Location
polecenia cmdlet , aby uzyskać bieżącą lokalizację katalogu systemu plików. Następnie dodaje prawy nawias kątowy (>
).
Przykład:
PS C:\ps-test>
Jeśli jesteś w wierszu polecenia zagnieżdżonego, funkcja dodaje dwa nawiasy kątowe (>>
) do monitu. Jeśli wartość $NestedPromptLevel
zmiennej automatycznej jest większa niż 0, pojawia się monit zagnieżdżony.
Na przykład podczas debugowania w wierszu polecenia zagnieżdżonego monit przypomina następujący monit:
[DBG] PS C:\ps-test>>>
Zmiany w monicie
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. 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 jest podobny do następującego:
PS [Server01] >
Następująca Prompt
funkcja zawiera bieżącą datę i godzinę:
function prompt {"$(Get-Date)> "}
Monit jest podobny do następującego:
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 po otwarciu programu PowerShell przy użyciu opcji Uruchom jako administrator :
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 zmienia kolor losowo. 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.