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

Этот командлет не возвращает выходные данные.