Register-ArgumentCompleter
Регистрирует пользовательский аргумент completer.
Синтаксис
NativeSet
Register-ArgumentCompleter
-CommandName <String[]>
-ScriptBlock <ScriptBlock>
[-Native]
[<CommonParameters>]
PowerShellSet
Register-ArgumentCompleter
-ParameterName <String>
-ScriptBlock <ScriptBlock>
[-CommandName <String[]>]
[<CommonParameters>]
Описание
Командлет Register-ArgumentCompleter регистрирует пользовательский аргумент завершения. Полный аргумент позволяет предоставить динамическое завершение вкладки во время выполнения для любой указанной команды.
При вызове этой команды с параметром CommandName и без параметровParameterName или Native команда выполняется, как если бы вы указали собственный параметр. Это предотвращает работу аргумента для параметров команды PowerShell. Всегда указывайте параметр ParameterName , если требуется зарегистрировать завершенный аргумент для команд PowerShell.
Примеры
Пример 1. Регистрация завершения пользовательского аргумента
В следующем примере регистрируется полный аргумент для параметра id командлета Set-TimeZone.
$s = {
param(
$commandName,
$parameterName,
$wordToComplete,
$commandAst,
$fakeBoundParameters
)
(Get-TimeZone -ListAvailable).Id | Where-Object {
$_ -like "$wordToComplete*"
} | ForEach-Object {
"'$_'"
}
}
Register-ArgumentCompleter -CommandName Set-TimeZone -ParameterName Id -ScriptBlock $s
Первая команда создает блок скрипта, который принимает необходимые параметры, которые передаются при нажатии пользователем клавиши TAB. Дополнительные сведения см. в описании параметра ScriptBlock .
В блоке скрипта доступные значения для Идентификатора извлекаются с помощью командлета Get-TimeZone . Свойство id для каждого часового пояса передаются командлету Where-Object. Командлет Where-Object фильтрует все идентификаторы, которые не начинаются со значения, предоставленного $wordToCompleteпользователем, который представляет текст, введенный пользователем до нажатия клавиши TAB. Отфильтрованные идентификаторы передаются ForEach-Object командлету, который заключает каждое значение в кавычки для обработки значений, содержащих пробелы.
Вторая команда регистрирует полный аргумент путем передачи скриптблока, идентификатора parameterName и CommandName.Set-TimeZone
Пример 2. Добавление сведений в значения завершения вкладки
В следующем примере перезаписывается завершение вкладки для параметра имени
$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 # completionText
$_.Name # listItemText
'ParameterValue' # resultType
$_.Name # toolTip
)
}
}
Register-ArgumentCompleter -CommandName Stop-Service -ParameterName Name -ScriptBlock $s
Первая команда создает блок скрипта, который принимает необходимые параметры, которые передаются при нажатии пользователем клавиши TAB. Дополнительные сведения см. в описании параметра ScriptBlock .
В блоке скрипта первая команда извлекает все запущенные службы с помощью командлета Where-Object . Службы передаются в командлет ForEach-Object. Командлет ForEach-Object создает новый объект System.Management.Automation.CompletionResult и заполняет его именем текущей службы (представленной переменной $_.Nameконвейера).
Объект CompletionResult позволяет предоставить дополнительные сведения для каждого возвращаемого значения:
- завершения (строка) — текст, используемый в качестве результата автоматического завершения. Это значение, отправленное команде.
- listItemText (String) — текст, отображаемый в списке, например, когда пользователь нажимает клавиши CTRL+ПРОБЕЛ. PowerShell использует это только для отображения. Он не передается команде при выборе.
- resultType (CompletionResultType) — тип результата завершения.
- подсказка (Строка) — текст подсказки со сведениями о объекте. Это видно, когда пользователь выбирает элемент после нажатия клавиш CTRL+ПРОБЕЛ.
Пример 3. Регистрация пользовательского полного аргумента Native
Вы можете использовать параметр 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(
$_, # completionText
$_, # listItemText
'ParameterValue', # resultType
$_ # toolTip
)
}
}
Register-ArgumentCompleter -Native -CommandName dotnet -ScriptBlock $scriptblock
Первая команда создает блок скрипта, который принимает необходимые параметры, которые передаются при нажатии пользователем клавиши TAB. Дополнительные сведения см. в описании параметра ScriptBlock .
В блоке скрипта dotnet complete команда выполняет завершение вкладки. Результаты передаются ForEach-Object командлету, который использует новый статический метод класса System.Management.Automation.CompletionResult для создания объекта CompletionResult для каждого значения.
Параметры
-CommandName
Указывает имя одной или нескольких команд для регистрации завершенного аргумента. Этот параметр является обязательным для собственных команд.
При указании этого параметра без параметровParameterName или Native команда ведет себя так, как если бы вы указали собственный параметр. При регистрации завершенных аргументов для команд PowerShell всегда укажите параметр ParameterName .
Если этот параметр не указан, PowerShell регистрирует полный аргумент для указанного имени параметра во всех командах PowerShell.
Свойства параметров
| Тип: | String[] |
| Default value: | None |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
NativeSet
| Position: | Named |
| Обязательно: | True |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
PowerShellSet
| Position: | Named |
| Обязательно: | False |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
-Native
Указывает, что полный аргумент предназначен для собственной команды, в которой PowerShell не может завершить имена параметров.
Свойства параметров
| Тип: | SwitchParameter |
| Default value: | None |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
NativeSet
| Position: | Named |
| Обязательно: | False |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
-ParameterName
Указывает имя параметра, к который применяется полный аргумент. Тип для указанных параметров не может быть перечислением, например параметр ForegroundColor командлета Write-Host .
Дополнительные сведения о перечислениях см. в about_Enum.
При регистрации завершенного аргумента для команд PowerShell всегда укажите этот параметр. При указании параметра CommandNameбез параметровParameterName или Native команда ведет себя так, как если бы вы указали собственный параметр.
Свойства параметров
| Тип: | String |
| Default value: | None |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
PowerShellSet
| Position: | Named |
| Обязательно: | True |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
-ScriptBlock
Указывает команды для выполнения завершения вкладки. Предоставленный блок скрипта должен возвращать значения, которые завершают входные данные. Блок скрипта должен отменить значения с помощью конвейера (ForEach-Object, Where-Objectи т. д.) или другого подходящего метода. Возврат массива значений приводит к тому, что PowerShell обрабатывает весь массив как одно значение завершения вкладки.
Этот блок скрипта также может возвращать объекты System.Management.Automation.CompletionResult для каждого значения, чтобы улучшить взаимодействие с пользователем. Возврат объектов CompletionResult позволяет определять подсказки и настраиваемые записи списка, отображаемые при нажатии клавиш CTRL+ПРОБЕЛ , чтобы отобразить список доступных завершений.
Этот блок скрипта должен принимать следующие параметры в указанном ниже порядке. Имена параметров не важны, так как PowerShell передает значения по позиции.
-
$commandName(Position 0, String) — этот параметр имеет имя команды, для которой выполняется выполнение скрипта. -
$parameterName(Позиция 1, строка) — этот параметр имеет значение параметра, значение которого требует завершения вкладки. -
$wordToComplete(Позиция 2, строка) — этот параметр имеет значение, предоставленное пользователем перед нажатием tab. Ваш скриптблок должен использовать это значение для определения значений завершения вкладки. -
$commandAst(Позиция 3, CommandAst) — этот параметр имеет значение "Дерево абстрактного синтаксиса" (AST) для текущей входной строки. Дополнительные сведения см. в разделе "Класс CommandAst". -
$fakeBoundParameters(Позиция 4 IDictionary) — этот параметр имеет хэш-таблицу, содержащую$PSBoundParametersкомандлет, прежде чем пользователь нажимал клавишу TAB. Дополнительные сведения см. в about_Automatic_Variables.
При указании собственного параметра блок скрипта должен принимать следующие параметры в указанном порядке. Имена параметров не важны, так как PowerShell передает значения по позиции.
-
$wordToComplete(Позиция 0, строка) — этот параметр имеет значение, предоставленное пользователем, прежде чем нажимать клавишу TAB. Ваш скриптблок должен использовать это значение для определения значений завершения вкладки. -
$commandAst(Позиция 1, CommandAst) — этот параметр имеет значение "Дерево абстрактного синтаксиса" (AST) для текущей входной строки. Дополнительные сведения см. в разделе "Класс CommandAst". -
$cursorPosition(Позиция 2, Int32) — этот параметр устанавливается на позицию курсора, когда пользователь нажимал клавишу TAB.
Вы также можете предоставить ArgumentCompleter в качестве атрибута параметра. Дополнительные сведения см. в разделе about_Functions_Advanced_Parameters.
Свойства параметров
| Тип: | ScriptBlock |
| Default value: | None |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
(All)
| Position: | Named |
| Обязательно: | True |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
CommonParameters
Этот командлет поддерживает общие параметры: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction и -WarningVariable. Дополнительные сведения см. в разделе about_CommonParameters.
Входные данные
None
Невозможно передать объекты в этот командлет.
Выходные данные
None
Этот командлет не возвращает выходные данные.