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.

Zobacz też