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ść PromptScriptBlock 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.

Zobacz też