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


о_подсказках

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

Описывает функцию 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 в диске Function.

Например:

PS C:\> Get-Command prompt

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

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

Например:

(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 {
  "PS $($ExecutionContext.SessionState.Path.CurrentLocation)$('>' * ($NestedPromptLevel + 1)) ";
  # .Link
  # https://go.microsoft.com/fwlink/?LinkID=225750
  # .ExternalHelp System.Management.Automation.dll-help.xml
}

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

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

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

Например:

PS C:\ps-test>

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

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

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

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

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

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

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

Дополнительные сведения о $PSDebugContext и $NestedPromptLevel автоматических переменных см. в 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 при выполнении в сеансе с повышенными привилегиями.

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) { '>>' }) + '> '
}

При запуске 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.

См. также