Register-ArgumentCompleter
Registriert einen benutzerdefinierten Argument completer.
Syntax
PowerShellSet
Register-ArgumentCompleter
-ParameterName <String>
-ScriptBlock <ScriptBlock>
[-CommandName <String[]>]
[<CommonParameters>]
NativeSet
Register-ArgumentCompleter
-CommandName <String[]>
-ScriptBlock <ScriptBlock>
[-Native]
[<CommonParameters>]
Beschreibung
Das cmdlet Register-ArgumentCompleter registriert einen benutzerdefinierten Argument completer. Ein Argument completer ermöglicht es Ihnen, zur Laufzeit für jeden von Ihnen angegebenen Befehl dynamischen Tabstoppabschluss bereitzustellen.
Beispiele
Beispiel 1: Registrieren eines benutzerdefinierten Argumentvervollständigens
Im folgenden Beispiel wird ein Argument completer für den parameter ID des Cmdlets Set-TimeZone registriert.
$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
Der erste Befehl erstellt einen Skriptblock, der die erforderlichen Parameter akzeptiert, die übergeben werden, wenn der Benutzer <TAB>drückt. Weitere Informationen finden Sie in der Beschreibung des ScriptBlock-Parameters .
Innerhalb des Skriptblocks werden die verfügbaren Werte für ID- mithilfe des cmdlets Get-TimeZone abgerufen. Die ID--Eigenschaft für jede Zeitzone wird an das cmdlet Where-Object weitergeleitet.
Das Where-Object Cmdlet filtert alle IDs heraus, die nicht mit dem von bereitgestellten Wert $wordToCompletebeginnen, der den Text darstellt, den der Benutzer eingegeben hat, bevor er <TAB>. Die gefilterten IDs werden an das Cmdlet weitergeleitet, das For-EachObject jeden Wert in Anführungszeichen einschließt, falls der Wert Leerzeichen enthält.
Der zweite Befehl registriert den Argumentvervollständiger, indem er den Skriptblock, den ParameterName "Id" und den CommandNameSet-TimeZone übergibt.
Beispiel 2: Hinzufügen von Details zu den Abschlusswerten der Registerkarte
Im folgenden Beispiel wird der Tabstoppabschluss für den Parameter Name des Cmdlets Stop-Service überschrieben und nur ausgeführte Dienste zurückgegeben.
$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
Der erste Befehl erstellt einen Skriptblock, der die erforderlichen Parameter akzeptiert, die übergeben werden, wenn der Benutzer <TAB>drückt. Weitere Informationen finden Sie in der Beschreibung des ScriptBlock-Parameters .
Innerhalb des Skriptblocks ruft der erste Befehl alle ausgeführten Dienste mithilfe des Cmdlets Where-Object ab. Die Dienste werden an das Cmdlet ForEach-Object weitergeleitet. Das ForEach-Object Cmdlet erstellt ein neues [System.Management.Automation.CompletionResult] Objekt und füllt es mit den Werten des aktuellen Diensts (dargestellt durch die Pipelinevariable $_).
Mit dem CompletionResult-Objekt können Sie jedem zurückgegebenen Wert zusätzliche Details bereitstellen:
- completionText (Zeichenfolge) – Der text, der als Ergebnis der automatischen Vervollständigung verwendet werden soll. Dies ist der Wert, der an den Befehl gesendet wird.
-
listItemText (Zeichenfolge): Der Text, der in einer Liste angezeigt werden soll, z. B. wenn der Benutzer auf
<Ctrl>+<Space>drückt. Dies wird nur für die Anzeige verwendet und wird beim Auswählen nicht an den Befehl übergeben. - resultType (CompletionResultType) – Der Typ des Abschlussergebnisses.
-
toolTip (Zeichenfolge) - Der Text für den Tooltip mit Details, die über das Objekt angezeigt werden sollen.
Dies ist sichtbar, wenn der Benutzer ein Element auswählt, nachdem er die Taste gedrückt hat
<Ctrl>+<Space>.
Der letzte Befehl zeigt, dass beendete Dienste weiterhin manuell an das Stop-Service Cmdlet übergeben werden können. Der Abschluss der Registerkarte ist der einzige Aspekt, der betroffen ist.
Beispiel 3: Registrieren eines benutzerdefinierten nativen Arguments completer
Sie können den Parameter Native verwenden, um den Tab-Abschluss für einen systemeigenen Befehl bereitzustellen. Im folgenden Beispiel wird der dotnet Befehlszeilenschnittstelle (CLI) die Tabstoppvervollständigung hinzugefügt.
Hinweis
Der Befehl dotnet complete ist nur in Version 2.0 und höher der dotnet cli verfügbar.
$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
Der erste Befehl erstellt einen Skriptblock, der die erforderlichen Parameter akzeptiert, die übergeben werden, wenn der Benutzer <TAB>drückt. Weitere Informationen finden Sie in der Beschreibung des ScriptBlock-Parameters .
Innerhalb des Skriptblocks wird der dotnet complete Befehl verwendet, um die Tab-Vervollständigung durchzuführen.
Die Ergebnisse werden an das Cmdlet weitergeleitet, das ForEach-Object die neue statische Methode der [System.Management.Automation.CompletionResult] Klasse verwendet, um für jeden Wert ein neues CompletionResult-Objekt zu erstellen.
Parameter
-CommandName
Gibt den Namen der Befehle als Array an.
Parametereigenschaften
| Typ: | String[] |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
Parametersätze
PowerShellSet
| Position: | Named |
| Obligatorisch: | False |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
NativeSet
| Position: | Named |
| Obligatorisch: | True |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
-Native
Gibt an, dass der Argumentvervollständigener für einen systemeigenen Befehl gilt, bei dem PowerShell keine Parameternamen abschließen kann.
Parametereigenschaften
| Typ: | SwitchParameter |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
Parametersätze
NativeSet
| Position: | Named |
| Obligatorisch: | False |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
-ParameterName
Gibt den Namen des Parameters an, dessen Argument abgeschlossen wird. Bei dem angegebenen Parameternamen darf es sich nicht um einen Aufzählungswert handeln, z. B. der ForegroundColor-Parameter des Write-Host Cmdlets.
Weitere Informationen zu Enumerationen finden Sie unter about_Enum.
Parametereigenschaften
| Typ: | String |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
Parametersätze
PowerShellSet
| Position: | Named |
| Obligatorisch: | True |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
-ScriptBlock
Gibt die Befehle an, die ausgeführt werden sollen, um den Abschluss der Registerkarte auszuführen. Der von Ihnen bereitgestellte Skriptblock sollte die Werte vollständig eingeben. Der Skriptblock muss die Registrierung der Werte mithilfe der Pipeline (ForEach-Object, Where-Objectusw.) oder einer anderen geeigneten Methode aufheben. Wenn Ein Array von Werten zurückgegeben wird, behandelt PowerShell das gesamte Array als einen Tabstoppabschlusswert.
Der Skriptblock sollte auch die folgenden Parameter in der unten angegebenen Reihenfolge akzeptieren. Die Namen der Parameter sind nicht wichtig, da PowerShell die Werte an der Position übergibt.
-
$commandName(Position 0) – Dieser Parameter wird auf den Namen des Befehls festgelegt, für den der Skriptblock den Tabstoppabschluss bereitstellt. -
$parameterName(Position 1) – Dieser Parameter wird auf den Parameter festgelegt, dessen Wert den Tabstoppabschluss erfordert. -
$wordToComplete(Position 2) - Dieser Parameter wird auf den Wert gesetzt, den der Benutzer vor dem Drücken von angegeben hat<TAB>. Ihr Skriptblock sollte diesen Wert verwenden, um die Werte für den Tabstoppabschluss zu ermitteln. -
$commandAst(Position 3) – Dieser Parameter wird für die aktuelle Eingabezeile auf die abstrakte Syntaxstruktur (AST) festgelegt. Weitere Informationen finden Sie unter Ast-Klasse. -
$fakeBoundParameter(Position 4) – Dieser Parameter wird auf eine Hashtabelle festgelegt, die die$PSBoundParametersfür das Cmdlet enthält, bevor der Benutzer gedrückt hat<TAB>. Weitere Informationen finden Sie unter about_Automatic_Variables.
Wenn Sie den nativen Parameter angeben, sollte der Skriptblock die folgenden Parameter in der angegebenen Reihenfolge annehmen. Die Namen der Parameter sind nicht wichtig, da PowerShell die Werte an der Position übergibt.
-
$commandName(Position 0) – Dieser Parameter wird auf den Namen des Befehls festgelegt, für den der Skriptblock den Tabstoppabschluss bereitstellt. -
$wordToComplete(Position 1) - Dieser Parameter wird auf den Wert gesetzt, den der Benutzer vor dem Drücken von<TAB>angegeben hat. Ihr Skriptblock sollte diesen Wert verwenden, um die Werte für den Tabstoppabschluss zu ermitteln. -
$cursorPosition(Position 2) - Dieser Parameter wird auf die Position des Cursors<TAB>gesetzt, wenn der Benutzer gedrückt hat.
Sie können auch ein ArgumentCompleter- als Parameterattribute bereitstellen. Weitere Informationen finden Sie unter about_Functions_Advanced_Parameters.
Parametereigenschaften
| Typ: | ScriptBlock |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
Parametersätze
(All)
| Position: | Named |
| Obligatorisch: | True |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
CommonParameters
Dieses Cmdlet unterstützt die allgemeinen Parameter -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction und -WarningVariable. Weitere Informationen findest du unter about_CommonParameters.
Eingaben
None
Objekte können nicht an dieses Cmdlet weitergeleitet werden.
Ausgaben
None
Dieses Cmdlet gibt keine Ausgabe zurück.