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


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

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