Register-ArgumentCompleter

Inscrit un completer d’argument personnalisé.

Syntaxe

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

Description

L’applet Register-ArgumentCompleter de commande inscrit un completer d’argument personnalisé. Un compléteur d’arguments vous permet de fournir une saisie semi-automatique de tabulation dynamique, au moment de l’exécution pour toute commande que vous spécifiez.

Lorsque vous appelez cette commande avec le paramètre CommandName et sans les paramètres ParameterName ou Natif, la commande s’exécute comme si vous avez spécifié le paramètre natif. Cela empêche le completer d’argument de fonctionner pour les paramètres de commande PowerShell. Spécifiez toujours le paramètre ParameterName lorsque vous souhaitez inscrire un completer d’argument pour les commandes PowerShell.

Exemples

Exemple 1 : Inscrire un completer d’argument personnalisé

L’exemple suivant inscrit un completer d’argument pour le paramètre ID de l’applet Set-TimeZone de commande.

$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

La première commande crée un bloc de script qui accepte les paramètres requis, qui sont passés lorsque l’utilisateur appuie sur Tab. Pour plus d’informations, consultez la description du paramètre ScriptBlock .

Dans le bloc de script, les valeurs disponibles pour ID sont récupérées à l’aide de l’applet de Get-TimeZone commande. La propriété ID pour chaque fuseau horaire est redirigée vers l’applet de Where-Object commande. L’applet Where-Object de commande filtre les ID qui ne commencent pas par la valeur fournie par $wordToComplete, qui représente le texte tapé par l’utilisateur avant d’appuyer sur Tab. Les ID filtrés sont redirigés vers l’applet ForEach-Object de commande, ce qui place chaque valeur entre guillemets pour gérer les valeurs qui contiennent des espaces.

La deuxième commande inscrit l’argument completer en passant le scriptblock, l’ID ParameterName et le CommandName Set-TimeZone.

Exemple 2 : Ajouter des détails à vos valeurs de saisie semi-automatique de tabulation

L’exemple suivant remplace la saisie semi-automatique de tabulation pour le paramètre Name de l’applet Stop-Service de commande et retourne uniquement les services en cours d’exécution.

$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

La première commande crée un bloc de script qui accepte les paramètres requis, qui sont passés lorsque l’utilisateur appuie sur Tab. Pour plus d’informations, consultez la description du paramètre ScriptBlock .

Dans le bloc de script, la première commande récupère tous les services en cours d’exécution à l’aide de l’applet de Where-Object commande. Les services sont redirigés vers l’applet ForEach-Object de commande. L’applet ForEach-Object de commande crée un objet System.Management.Automation.CompletionResult et le remplit avec le nom du service actuel (représenté par la variable $_.Namede pipeline).

L’objet CompletionResult vous permet de fournir des détails supplémentaires à chaque valeur retournée :

  • completionText (String) : texte à utiliser comme résultat de saisie semi-automatique. Il s’agit de la valeur envoyée à la commande.
  • listItemText (String) : texte à afficher dans une liste, par exemple lorsque l’utilisateur appuie sur Ctrl+Espace. PowerShell utilise cette option uniquement pour l’affichage. Elle n’est pas passée à la commande quand elle est sélectionnée.
  • resultType (CompletionResultType) : type de résultat d’achèvement.
  • toolTip (String) : texte de l’info-bulle avec des détails à afficher sur l’objet. Cela est visible lorsque l’utilisateur sélectionne un élément après avoir appuyé sur Ctrl+Espace.

Exemple 3 : Inscrire un completer d’argument natif personnalisé

Vous pouvez utiliser le paramètre Natif pour fournir la saisie semi-automatique de tabulation pour une commande native. L’exemple suivant ajoute la saisie semi-automatique de tabulation pour l’interface dotnet de ligne de commande (CLI).

Remarque

La dotnet complete commande est disponible uniquement dans la version 2.0 et supérieure de l’interface cli dotnet.

$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

La première commande crée un bloc de script qui accepte les paramètres requis, qui sont passés lorsque l’utilisateur appuie sur Tab. Pour plus d’informations, consultez la description du paramètre ScriptBlock .

Dans le bloc de script, la dotnet complete commande effectue l’achèvement de l’onglet. Les résultats sont redirigés vers l’applet ForEach-Object de commande, qui utilise la nouvelle méthode statique de la classe System.Management.Automation.CompletionResult pour créer un objet CompletionResult pour chaque valeur.

Paramètres

-CommandName

Spécifie le nom d’une ou plusieurs commandes pour inscrire l’argument completer pour. Ce paramètre est obligatoire pour les commandes natives.

Lorsque vous spécifiez ce paramètre sans paramètres ParameterName ou Natif , la commande se comporte comme si vous aviez spécifié le paramètre Natif . Lors de l’inscription d’arguments complets pour les commandes PowerShell, spécifiez toujours le paramètre ParameterName .

Si vous ne spécifiez pas ce paramètre, PowerShell inscrit l’argument completer pour le ParameterName spécifié dans toutes les commandes PowerShell.

Type:String[]
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-Native

Indique que l’argument completer est destiné à une commande native où PowerShell ne peut pas terminer les noms de paramètres.

Type:SwitchParameter
Position:Named
Valeur par défaut:None
Obligatoire:False
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-ParameterName

Spécifie le nom du paramètre à lequel l’argument completer s’applique. Le type des paramètres spécifiés ne peut pas être une énumération, par exemple le paramètre ForegroundColor de l’applet Write-Host de commande.

Pour plus d’informations sur les énumérations, consultez about_Enum.

Lors de l’inscription d’un completer d’argument pour les commandes PowerShell, spécifiez toujours ce paramètre. Lorsque vous spécifiez le paramètre CommandName sans paramètres ParameterName ou Natif , la commande se comporte comme si vous avez spécifié le paramètre natif .

Type:String
Position:Named
Valeur par défaut:None
Obligatoire:True
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-ScriptBlock

Spécifie les commandes à exécuter pour effectuer la saisie semi-automatique de tabulation. Le bloc de script que vous fournissez doit retourner les valeurs qui terminent l’entrée. Le bloc de script doit désinscrire les valeurs à l’aide du pipeline (ForEach-Object, Where-Objectetc.) ou d’une autre méthode appropriée. Le renvoi d’un tableau de valeurs entraîne le traitement de PowerShell dans l’ensemble du tableau comme une valeur d’achèvement d’onglet .

Le bloc de script peut également retourner des objets System.Management.Automation.CompletionResult pour chaque valeur afin d’améliorer l’expérience utilisateur. Le renvoi d’objets CompletionResult vous permet de définir des info-bulles et des entrées de liste personnalisée affichées lorsque les utilisateurs appuient sur Ctrl+Espace pour afficher la liste des saisies semi-automatiques disponibles.

Le bloc de script doit accepter les paramètres suivants dans l’ordre spécifié ci-dessous. Les noms des paramètres ne sont pas importants, car PowerShell passe les valeurs par position.

  • $commandName (Position 0, Chaîne) : ce paramètre est défini sur le nom de la commande pour laquelle le bloc de script fournit la saisie semi-automatique de tabulation.
  • $parameterName (Position 1, Chaîne) : ce paramètre est défini sur le paramètre dont la valeur nécessite l’achèvement de tabulation.
  • $wordToComplete (Position 2, Chaîne) : ce paramètre est défini sur la valeur fournie par l’utilisateur avant d’appuyer sur Tab. Votre bloc de script doit utiliser cette valeur pour déterminer les valeurs d’achèvement de tabulation.
  • $commandAst (Position 3, CommandAst) : ce paramètre est défini sur l’arborescence de syntaxe abstraite (AST) pour la ligne d’entrée actuelle. Pour plus d’informations, consultez La classe CommandAst.
  • $fakeBoundParameters (Position 4 IDictionary) : ce paramètre est défini sur une table de hachage contenant l’applet $PSBoundParameters de commande, avant que l’utilisateur n’appuie sur Tab. Pour plus d’informations, consultez about_Automatic_Variables.

Lorsque vous spécifiez le paramètre natif , le bloc de script doit prendre les paramètres suivants dans l’ordre spécifié. Les noms des paramètres ne sont pas importants, car PowerShell passe les valeurs par position.

  • $wordToComplete (Position 0, Chaîne) : ce paramètre est défini sur la valeur fournie par l’utilisateur avant d’appuyer sur Tab. Votre bloc de script doit utiliser cette valeur pour déterminer les valeurs d’achèvement de tabulation.
  • $commandAst (Position 1, CommandAst) : ce paramètre est défini sur l’arborescence de syntaxe abstraite (AST) pour la ligne d’entrée actuelle. Pour plus d’informations, consultez La classe CommandAst.
  • $cursorPosition (Position 2, Int32) : ce paramètre est défini sur la position du curseur lorsque l’utilisateur a appuyé sur Tab.

Vous pouvez également fournir un ArgumentCompleter en tant qu’attribut de paramètre. Pour plus d’informations, consultez about_Functions_Advanced_Parameters.

Type:ScriptBlock
Position:Named
Valeur par défaut:None
Obligatoire:True
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

Entrées

None

Vous ne pouvez pas diriger les objets vers cette applet de commande.

Sorties

None

Cette applet de commande ne retourne pas de sortie.