Udostępnij za pośrednictwem


about_Prompts

Krótki opis

Prompt Opisuje funkcję i pokazuje, jak utworzyć funkcję niestandardowąPrompt.

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 nawias prawego kąta (>).

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

Monit domyślny

Domyślny monit jest wyświetlany tylko wtedy, gdy Prompt funkcja generuje błąd lub nie zwraca obiektu.

Domyślny wiersz polecenia programu PowerShell to:

PS>

Na przykład następujące polecenie ustawia Prompt funkcję na $null, która jest nieprawidłowa. W związku z tym 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 nie zostanie wypełniona, funkcja zostanie dodana PS do monitu. Funkcja używa Get-Location polecenia cmdlet do pobrania bieżącej lokalizacji katalogu systemu plików. Następnie dodaje 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 $NestedPromptLevel wartość zmiennej automatycznej 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ę, aby uwzględnić nazwę 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 zmiennych automatycznych $PSDebugContext 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] >

Poniższa 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>

Prompt Poniższa 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 wiersza polecenia 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ż