Поделиться через


Сведения о запросах

Краткое описание

Описывает функцию Prompt и демонстрирует создание пользовательской Prompt функции.

Подробное описание

Командная строка PowerShell указывает, что PowerShell готов к выполнению команды:

PS C:\>

Запрос PowerShell определяется встроенной Prompt функцией. Вы можете настроить запрос, создав собственную Prompt функцию и сохранив ее в профиле PowerShell.

Сведения о функции Prompt

Функция Prompt определяет внешний вид запроса PowerShell. PowerShell поставляется со встроенной Prompt функцией, но ее можно переопределить, определив собственную Prompt функцию.

Функция Prompt имеет следующий синтаксис:

function Prompt { <function-body> }

Функция Prompt должна возвращать объект . Рекомендуется возвращать строку или объект, отформатированный в виде строки. Максимальная рекомендуемая длина — 80 символов.

Например, следующая Prompt функция возвращает строку "Hello, World", за которой следует правая угловая скобка (>).

PS C:\> function prompt {"Hello, World > "}
Hello, World >

Получение функции Prompt

Чтобы получить функцию Prompt , используйте Get-Command командлет или Get-Item командлет на диске Функции.

Пример:

PS C:\> Get-Command Prompt

CommandType     Name      ModuleName
-----------     ----      ----------
Function        prompt

Чтобы получить скрипт, который задает значение запроса, используйте метод точка для получения свойства PromptScriptBlock функции.

Пример:

(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

Как и все функции, Prompt функция хранится на Function: диске. Чтобы отобразить скрипт, создающий текущую Prompt функцию, введите:

(Get-Item function:prompt).ScriptBlock

Запрос по умолчанию

Запрос по умолчанию появляется только в Prompt том случае, если функция создает ошибку или не возвращает объект .

Запрос PowerShell по умолчанию:

PS>

Например, следующая команда задает Prompt для функции $nullзначение , что недопустимо. В результате появится запрос по умолчанию.

PS C:\> function prompt {$null}
PS>

Так как PowerShell поставляется со встроенным запросом, обычно запрос по умолчанию не отображается.

Встроенный запрос

PowerShell включает встроенную Prompt функцию.

function prompt {
    $(if (Test-Path variable:/PSDebugContext) { '[DBG]: ' }
      else { '' }) + 'PS ' + $(Get-Location) +
        $(if ($NestedPromptLevel -ge 1) { '>>' }) + '> '
}

Функция использует командлет , Test-Path чтобы определить, заполняется ли $PSDebugContext автоматическая переменная. Если $PSDebugContext параметр заполнен, вы находитесь в режиме отладки и [DBG]: добавляется в запрос следующим образом:

[DBG]: PS C:\ps-test>

Если $PSDebugContext параметр не заполнен, функция добавляет PS в запрос. Кроме того, функция использует Get-Location командлет для получения текущего расположения каталога файловой системы. Затем добавляется правая угловая скобка (>).

Пример:

PS C:\ps-test>

Если вы находитесь во вложенном запросе, функция добавляет в запрос две угловые скобки (>>). (Вы используете вложенный запрос, если значение автоматической $NestedPromptLevel переменной больше 1.)

Например, при отладке во вложенном запросе запрос выглядит примерно так:

[DBG] PS C:\ps-test>>>

Изменения в запросе

Командлет Enter-PSSession добавляет имя удаленного компьютера к текущей Prompt функции. При использовании командлета Enter-PSSession для запуска сеанса с удаленным компьютером в командной строке изменяется имя удаленного компьютера. Пример:

PS Hello, World> Enter-PSSession Server01
[Server01]: PS Hello, World>

Другие ведущие приложения PowerShell и альтернативные оболочки могут иметь собственные пользовательские командные строки.

Дополнительные сведения об автоматических переменных и $NestedPromptLevel см. в $PSDebugContextразделе about_Automatic_Variables.

Настройка запроса

Чтобы настроить запрос, напишите новую Prompt функцию. Функция не защищена, поэтому ее можно перезаписать.

Чтобы написать функцию Prompt , введите следующее:

function prompt { }

Затем введите между фигурными скобками команды или строку, создающую запрос.

Например, следующий запрос содержит имя компьютера:

function prompt {"PS [$env:COMPUTERNAME]> "}

На компьютере Server01 запрос выглядит примерно так:

PS [Server01] >

Следующая Prompt функция включает текущие дату и время:

function prompt {"$(Get-Date)> "}

Запрос похож на следующий запрос:

03/15/2012 17:49:47>

Вы также можете изменить функцию по умолчанию Prompt :

Например, следующая измененная Prompt функция добавляется [ADMIN]: во встроенный запрос PowerShell при открытии PowerShell с помощью параметра Запуск от имени администратора :

function prompt {
  $identity = [Security.Principal.WindowsIdentity]::GetCurrent()
  $principal = [Security.Principal.WindowsPrincipal] $identity

  $(if (Test-Path variable:/PSDebugContext) { '[DBG]: ' }
    elseif($principal.IsInRole([Security.Principal.WindowsBuiltInRole]
      "Administrator")) { "[ADMIN]: " }
    else { '' }
  ) + 'PS ' + $(Get-Location) +
    $(if ($NestedPromptLevel -ge 1) { '>>' }) + '> '
}

При запуске PowerShell с помощью параметра Запуск от имени администратора отображается запрос, похожий на следующий запрос:

[ADMIN]: PS C:\ps-test>

Следующая Prompt функция отображает идентификатор журнала следующей команды. Чтобы просмотреть журнал команд, используйте Get-History командлет .

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 >"
}

Следующий запрос использует Write-Host командлеты и Get-Random для создания запроса, который изменяет цвет случайным образом. Так как Write-Host выполняет запись в текущее ведущее приложение, но не возвращает объект , эта функция включает оператор Return . Без него PowerShell использует запрос по умолчанию , PS>.

function prompt {
    $color = Get-Random -Min 1 -Max 16
    Write-Host ("PS " + $(Get-Location) +">") -NoNewLine `
     -ForegroundColor $Color
    return " "
}

Сохранение функции Prompt

Как и любая функция, Prompt функция существует только в текущем сеансе. Чтобы сохранить функцию Prompt для будущих сеансов, добавьте ее в профили PowerShell. Дополнительные сведения о профилях см. в разделе about_Profiles.

См. также раздел

Get-Location

Enter-PSSession

Get-History

Get-Random

Write-Host

about_Profiles

about_Functions

about_Scopes

about_Debuggers

about_Automatic_Variables