about_Prompts
Краткое описание
Описывает функцию 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
Чтобы получить скрипт, который задает значение запроса, используйте метод точка для получения свойства Prompt
ScriptBlock функции.
Пример:
(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
переменной больше 0.
Например, при отладке во вложенном запросе запрос выглядит примерно так:
[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
$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.