Register-ArgumentCompleter
Регистрирует пользовательский аргумент completer.
Синтаксис
Register-ArgumentCompleter
-CommandName <String[]>
-ScriptBlock <ScriptBlock>
[-Native]
[<CommonParameters>]
Register-ArgumentCompleter
[-CommandName <String[]>]
-ParameterName <String>
-ScriptBlock <ScriptBlock>
[<CommonParameters>]
Описание
Командлет Register-ArgumentCompleter
регистрирует полный настраиваемый аргумент. Полный аргумент позволяет предоставить динамическое завершение вкладки во время выполнения для любой указанной команды.
Примеры
Пример 1. Регистрация завершения пользовательского аргумента
В следующем примере регистрируется полный аргумент для параметра Id командлета Set-TimeZone
.
$scriptBlock = {
param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters)
(Get-TimeZone -ListAvailable).Id | Where-Object {
$_ -like "$wordToComplete*"
} | ForEach-Object {
"'$_'"
}
}
Register-ArgumentCompleter -CommandName Set-TimeZone -ParameterName Id -ScriptBlock $scriptBlock
Первая команда создает блок скрипта, который принимает необходимые параметры, передаваемые при нажатии пользователем клавиши TAB. Дополнительные сведения см. в описании параметра ScriptBlock .
В блоке скрипта доступные значения для Идентификатора извлекаются с помощью командлета Get-TimeZone
. Свойство Id для каждого часового пояса передаются командлету Where-Object
. Командлет Where-Object
фильтрует все идентификаторы, которые не начинаются со значения, предоставленного $wordToComplete
пользователем, который представляет текст, введенный пользователем до нажатия клавиши TAB. Отфильтрованные идентификаторы передаются командлету ForEach-Object
, который заключает каждое значение в кавычки, должно содержать пробелы.
Вторая команда регистрирует полный аргумент путем передачи скриптблока, идентификатора parameterName и CommandNameSet-TimeZone
.
Пример 2. Добавление сведений в значения завершения вкладки
В следующем примере перезаписывается завершение вкладки для параметра Name командлета Stop-Service
и возвращается только запущенные службы.
$s = {
param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters)
$services = Get-Service | Where-Object {$_.Status -eq "Running" -and $_.Name -like "$wordToComplete*"}
$services | ForEach-Object {
New-Object -Type System.Management.Automation.CompletionResult -ArgumentList $_.Name,
$_.Name,
"ParameterValue",
$_.Name
}
}
Register-ArgumentCompleter -CommandName Stop-Service -ParameterName Name -ScriptBlock $s
Первая команда создает блок скрипта, который принимает необходимые параметры, передаваемые при нажатии пользователем клавиши TAB. Дополнительные сведения см. в описании параметра ScriptBlock .
В блоке скрипта первая команда извлекает все запущенные службы с помощью командлета Where-Object
. Службы передаются командлету ForEach-Object
. Командлет ForEach-Object
создает новый объект System.Management.Automation.CompletionResult и заполняет его именем текущей службы (представленной переменной $_.Name
конвейера).
Объект CompletionResult позволяет предоставить дополнительные сведения для каждого возвращаемого значения:
- completionText (String) — текст, используемый в качестве результата автозавершения. Это значение, отправленное команде.
- listItemText (String) — текст, отображаемый в списке, например, когда пользователь нажимает клавиши CTRL+ПРОБЕЛ. Он используется только для отображения и не передается команде при выборе.
- resultType (CompletionResultType) — тип результата завершения.
- подсказка (Строка) — текст подсказки со сведениями о объекте. Это видно, когда пользователь выбирает элемент после нажатия клавиш CTRL+ПРОБЕЛ.
Последняя команда демонстрирует, что остановленные службы по-прежнему могут передаваться вручную командлету Stop-Service
. Завершение вкладки является единственным аспектом, затронутым.
Пример 3. Регистрация пользовательского полного аргумента Native
Вы можете использовать собственный параметр для предоставления завершения табуляции для собственной команды. В следующем примере добавляется завершение вкладки для интерфейса командной dotnet
строки (CLI).
Примечание.
Команда dotnet complete
доступна только в версии 2.0 и большей части dotnet cli.
$scriptblock = {
param($wordToComplete, $commandAst, $cursorPosition)
dotnet complete --position $cursorPosition $commandAst.ToString() | ForEach-Object {
[System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
}
}
Register-ArgumentCompleter -Native -CommandName dotnet -ScriptBlock $scriptblock
Первая команда создает блок скрипта, который принимает необходимые параметры, передаваемые при нажатии пользователем клавиши TAB. Дополнительные сведения см. в описании параметра ScriptBlock .
В блоке dotnet complete
скрипта команда используется для выполнения завершения вкладки.
Результаты передаются ForEach-Object
командлету, который использует новый статический метод класса System.Management.Automation.CompletionResult для создания нового объекта CompletionResult для каждого значения.
Параметры
-CommandName
Задает имя команд в виде массива.
Type: | String[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Native
Указывает, что полный аргумент предназначен для собственной команды, в которой PowerShell не может завершить имена параметров.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ParameterName
Указывает имя параметра, аргумент которого завершен. Указанное имя параметра не может быть перечисленным значением, например параметром ForegroundColor командлета Write-Host
.
Дополнительные сведения о перечислениях см. в about_Enum.
Type: | String |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ScriptBlock
Указывает команды для выполнения завершения вкладки. Предоставленный блок скрипта должен возвращать значения, которые завершают входные данные. Блок скрипта должен откатить значения с помощью конвейера (ForEach-Object
и Where-Object
т. д.) или другого подходящего метода. Возврат массива значений приводит к тому, что PowerShell будет рассматривать весь массив как значение завершения одной вкладки.
Блок скрипта должен принимать следующие параметры в указанном ниже порядке. Имена параметров не важны, так как PowerShell передает значения по позиции.
$commandName
(Позиция 0) — этот параметр имеет имя команды, для которой блок скрипта предоставляет завершение вкладки.$parameterName
(Позиция 1) — этот параметр имеет значение параметра, значение которого требует завершения вкладки.$wordToComplete
(Позиция 2) — этот параметр имеет значение, указанное пользователем перед нажатием tab. Блок скрипта должен использовать это значение для определения значений завершения вкладки.$commandAst
(Позиция 3) — этот параметр имеет значение "Дерево абстрактного синтаксиса" (AST) для текущей входной строки. Дополнительные сведения см. в разделе Ast Class.$fakeBoundParameters
(Позиция 4) — этот параметр имеет хэш-таблицу, содержащую$PSBoundParameters
командлет, прежде чем пользователь нажимал клавишу TAB. Дополнительные сведения см. в about_Automatic_Variables.
При указании параметра Native блок скрипта должен принимать следующие параметры в указанном порядке. Имена параметров не важны, так как PowerShell передает значения по позиции.
$wordToComplete
(Позиция 0) — этот параметр имеет значение, указанное пользователем перед нажатием клавиши TAB. Блок скрипта должен использовать это значение для определения значений завершения вкладки.$commandAst
(Позиция 1) — этот параметр имеет значение абстрактное дерево синтаксиса (AST) для текущей входной строки. Дополнительные сведения см. в разделе Ast Class.$cursorPosition
(Позиция 2) — этот параметр устанавливается на позицию курсора, когда пользователь нажимал клавишу TAB.
Вы также можете указать аргументCompleter в качестве атрибута параметра. Дополнительные сведения см. в about_Functions_Advanced_Parameters.
Type: | ScriptBlock |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Входные данные
None
Невозможно передать объекты в этот командлет.
Выходные данные
None
Этот командлет не возвращает выходные данные.
PowerShell
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по