Compartilhar via


Register-ArgumentCompleter

Registra um concluídor de argumento personalizado.

Sintaxe

PowerShellSet

Register-ArgumentCompleter
    -ParameterName <String>
    -ScriptBlock <ScriptBlock>
    [-CommandName <String[]>]
    [<CommonParameters>]

NativeSet

Register-ArgumentCompleter
    -CommandName <String[]>
    -ScriptBlock <ScriptBlock>
    [-Native]
    [<CommonParameters>]

Description

O cmdlet Register-ArgumentCompleter registra um concluídor de argumento personalizado. Um concluídor de argumento permite que você forneça a conclusão da guia dinâmica em tempo de execução para qualquer comando especificado.

Exemplos

Exemplo 1: registrar um concluídor de argumento personalizado

O exemplo a seguir registra um concluídor de argumento para o parâmetro de ID do cmdlet .

$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

O primeiro comando cria um bloco de script que usa os parâmetros necessários que são passados quando o usuário pressiona <TAB>. Para obter mais informações, consulte a descrição do parâmetro ScriptBlock.

No bloco de script, os valores disponíveis para Id são recuperados usando o cmdlet Get-TimeZone. A propriedade ID para cada Fuso Horário é canalizada para o cmdlet Where-Object. O cmdlet Where-Object filtra todas as IDs que não começam com o valor fornecido pelo $wordToComplete, que representa o texto digitado pelo usuário antes de pressionar <TAB>. As IDs filtradas são canalizadas para o cmdlet For-EachObject que inclui cada valor entre aspas, caso o valor contenha espaços.

O segundo comando registra o concluídor de argumentos passando o scriptblock, o ParameterName "Id" e o CommandNameSet-TimeZone.

Exemplo 2: adicionar detalhes aos valores de conclusão da guia

O exemplo a seguir substitui a conclusão da guia para o parâmetro Name do cmdlet Stop-Service e retorna apenas serviços em execução.

$s = {
    param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters)
    $services = Get-Service | Where-Object {$_.Status -eq "Running" }
    $services | Where-Object { $_.Name -like "$wordToComplete*" } | ForEach-Object {
        New-Object -Type System.Management.Automation.CompletionResult -ArgumentList $_,
            $_,
            "ParameterValue",
            $_
    }
}
Register-ArgumentCompleter -CommandName dotnet -Native -ScriptBlock $s

O primeiro comando cria um bloco de script que usa os parâmetros necessários que são passados quando o usuário pressiona <TAB>. Para obter mais informações, consulte a descrição do parâmetro ScriptBlock.

Dentro do bloco de script, o primeiro comando recupera todos os serviços em execução usando o cmdlet Where-Object. Os serviços são canalizados para o cmdlet ForEach-Object. O cmdlet ForEach-Object cria um novo objeto [System.Management.Automation.CompletionResult] e o preenche com os valores do serviço atual (representado pela variável de pipeline $_).

O objeto CompletionResult permite que você forneça detalhes adicionais para cada valor retornado:

  • completionText (String) – O texto a ser usado como o resultado de conclusão automática. Esse é o valor enviado para o comando.
  • listItemText (String) – O texto a ser exibido em uma lista, como quando o usuário pressiona <Ctrl>+<Space>. Isso é usado somente para exibição e não é passado para o comando quando selecionado.
  • resultType (CompletionResultType) – O tipo de resultado de conclusão.
  • toolTip (String) – O texto da dica de ferramenta com detalhes a serem exibidos sobre o objeto. Isso fica visível quando o usuário seleciona um item depois de pressionar <Ctrl>+<Space>.

O último comando demonstra que os serviços interrompidos ainda podem ser passados manualmente para o cmdlet Stop-Service. A conclusão da guia é o único aspecto afetado.

Exemplo 3: Registrar um concluídor de argumento nativo personalizado

Você pode usar o parâmetro Native para fornecer a conclusão da guia para um comando nativo. O exemplo a seguir adiciona a conclusão da guia para a CLI (Interface de Linha de Comando) do dotnet.

Observação

O comando dotnet complete só está disponível na versão 2.0 e superior da cli dotnet.

$scriptblock = {
     param($commandName, $wordToComplete, $cursorPosition)
         dotnet complete --position $cursorPosition "$wordToComplete" | ForEach-Object {
            [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
         }
 }
Register-ArgumentCompleter -Native -CommandName dotnet -ScriptBlock $scriptblock

O primeiro comando cria um bloco de script que usa os parâmetros necessários que são passados quando o usuário pressiona <TAB>. Para obter mais informações, consulte a descrição do parâmetro ScriptBlock.

Dentro do bloco de script, o comando dotnet complete é usado para executar a conclusão da guia. Os resultados são canalizados para o cmdlet ForEach-Object que usa o novo método estático da classe [System.Management.Automation.CompletionResult] para criar um novo objeto CompletionResult para cada valor.

Parâmetros

-CommandName

Especifica o nome dos comandos como uma matriz.

Propriedades do parâmetro

Tipo:

String[]

Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

PowerShellSet
Cargo:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes:False
NativeSet
Cargo:Named
Obrigatório:True
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes:False

-Native

Indica que o concluídor de argumento é para um comando nativo em que o PowerShell não pode concluir nomes de parâmetro.

Propriedades do parâmetro

Tipo:SwitchParameter
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

NativeSet
Cargo:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes:False

-ParameterName

Especifica o nome do parâmetro cujo argumento está sendo concluído. O nome do parâmetro especificado não pode ser um valor enumerado, como o parâmetro ForegroundColor do cmdlet Write-Host.

Para obter mais informações sobre enumerações, consulte about_Enum.

Propriedades do parâmetro

Tipo:String
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

PowerShellSet
Cargo:Named
Obrigatório:True
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes:False

-ScriptBlock

Especifica os comandos a serem executados para executar a conclusão da guia. O bloco de script que você fornece deve retornar os valores que completam a entrada. O bloco de script deve cancelar o registro dos valores usando o pipeline (ForEach-Object, Where-Object, etc.) ou outro método adequado. Retornar uma matriz de valores faz com que o PowerShell trate toda a matriz como um valor de conclusão da guia.

O bloco de script também deve aceitar os seguintes parâmetros na ordem especificada abaixo. Os nomes dos parâmetros não são importantes porque o PowerShell passa os valores posicionalmente.

  • $commandName (Posição 0) – esse parâmetro é definido como o nome do comando para o qual o bloco de script está fornecendo a conclusão da guia.
  • $parameterName (Posição 1) – esse parâmetro é definido como o parâmetro cujo valor requer a conclusão da guia.
  • $wordToComplete (Posição 2) – esse parâmetro é definido como valor que o usuário forneceu antes de pressionar <TAB>. O bloco de script deve usar esse valor para determinar os valores de conclusão da guia.
  • $commandAst (Posição 3) – esse parâmetro é definido como AST (Árvore de Sintaxe Abstrata) para a linha de entrada atual. Para obter mais informações, consulte Ast Class.
  • $fakeBoundParameter (Posição 4) – esse parâmetro é definido como um hash que contém o $PSBoundParameters para o cmdlet, antes que o usuário pressione <TAB>. Para obter mais informações, confira about_Automatic_Variables.

Quando você especificar o parâmetro Native, o bloco de script deverá usar os seguintes parâmetros na ordem especificada. Os nomes dos parâmetros não são importantes porque o PowerShell passa os valores posicionalmente.

  • $commandName (Posição 0) – esse parâmetro é definido como o nome do comando para o qual o bloco de script está fornecendo a conclusão da guia.
  • $wordToComplete (Posição 1) – esse parâmetro é definido como valor que o usuário forneceu antes de pressionar <TAB>. O bloco de script deve usar esse valor para determinar os valores de conclusão da guia.
  • $cursorPosition (Posição 2) – esse parâmetro é definido como a posição do cursor quando o usuário pressiona <TAB>.

Você também pode fornecer um ArgumentCompleter como um atributo de parâmetro. Para obter mais informações, consulte about_Functions_Advanced_Parameters.

Propriedades do parâmetro

Tipo:ScriptBlock
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

(All)
Cargo:Named
Obrigatório:True
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes:False

CommonParameters

Este cmdlet suporta os parâmetros comuns: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction e -WarningVariable. Para obter mais informações, consulte about_CommonParameters.

Entradas

None

Você não pode redirecionar objetos para este cmdlet.

Saídas

None

Esse cmdlet não retorna nenhuma saída.