Register-ArgumentCompleter
Registreert een aangepaste argument completer.
Syntax
NativeSet
Register-ArgumentCompleter
-CommandName <String[]>
-ScriptBlock <ScriptBlock>
[-Native]
[<CommonParameters>]
PowerShellSet
Register-ArgumentCompleter
-ParameterName <String>
-ScriptBlock <ScriptBlock>
[-CommandName <String[]>]
[<CommonParameters>]
Description
De cmdlet Register-ArgumentCompleter registreert een aangepaste argument-completer. Met een argument completer kunt u dynamische tabvoltooiing opgeven, tijdens runtime voor elke opdracht die u opgeeft.
Wanneer u deze opdracht aanroept met de parameter CommandName en zonder de parameter ParameterName of Native parameters, wordt de opdracht uitgevoerd alsof u de parameter Native hebt opgegeven. Hiermee voorkomt u dat de argument completer werkt voor PowerShell-opdrachtparameters. Geef altijd de parameter ParameterName op wanneer u een argument completer wilt registreren voor PowerShell-opdrachten.
Voorbeelden
Voorbeeld 1: Een aangepaste argument completer registreren
In het volgende voorbeeld wordt een argument completer geregistreerd voor de parameter van de
$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
Met de eerste opdracht maakt u een scriptblok dat de vereiste parameters gebruikt, die worden doorgegeven wanneer de gebruiker op Tab-drukt. Zie de beschrijving van de parameter ScriptBlock voor meer informatie.
In het scriptblok worden de beschikbare waarden voor id- opgehaald met behulp van de cmdlet Get-TimeZone. De eigenschap id voor elke tijdzone wordt doorgesluisd naar de Where-Object-cmdlet. De Where-Object cmdlet filtert id's die niet beginnen met de waarde die wordt geleverd door $wordToComplete, die de tekst vertegenwoordigt die de gebruiker heeft getypt voordat ze op Tab-drukken. De gefilterde id's worden doorgesluisd naar de ForEach-Object cmdlet, die elke waarde tussen aanhalingstekens plaatst om waarden te verwerken die spaties bevatten.
Met de tweede opdracht wordt de argument completer geregistreerd door het scriptblok door te geven, de ParameterNameId en de CommandNameSet-TimeZone.
Voorbeeld 2: Details toevoegen aan de voltooiingswaarden van het tabblad
In het volgende voorbeeld wordt de tabvoltooiing voor de parameter naam van de Stop-Service-cmdlet overschreven en worden alleen actieve services geretourneerd.
$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
Met de eerste opdracht maakt u een scriptblok dat de vereiste parameters gebruikt, die worden doorgegeven wanneer de gebruiker op Tab-drukt. Zie de beschrijving van de parameter ScriptBlock voor meer informatie.
Binnen het scriptblok haalt de eerste opdracht alle actieve services op met behulp van de cmdlet Where-Object. De services worden doorgesluisd naar de cmdlet ForEach-Object. De ForEach-Object-cmdlet maakt een nieuw System.Management.Automation.CompletionResult-object en vult het met de naam van de huidige service (vertegenwoordigd door de pijplijnvariabele $_.Name).
Met het object CompletionResult kunt u aanvullende details opgeven voor elke geretourneerde waarde:
- completionText (tekenreeks): de tekst die moet worden gebruikt als het resultaat van automatische voltooiing. Dit is de waarde die naar de opdracht wordt verzonden.
- listItemText (tekenreeks): de tekst die in een lijst moet worden weergegeven, bijvoorbeeld wanneer de gebruiker op Ctrl+spatiebalkdrukt. PowerShell gebruikt dit alleen voor weergave. Deze wordt niet doorgegeven aan de opdracht wanneer deze is geselecteerd.
- resultType (CompletionResultType) - het type voltooiingsresultaat.
- knopinfo (tekenreeks): de tekst voor de knopinfo met details die over het object moeten worden weergegeven. Dit is zichtbaar wanneer de gebruiker een item selecteert nadat hij op Ctrl+spatiebalkheeft gedrukt.
Voorbeeld 3: Een aangepast systeemeigen argument completer registreren
U kunt de parameter Native gebruiken om tabvoltooiing op te geven voor een systeemeigen opdracht. In het volgende voorbeeld wordt tabvoltooiing toegevoegd voor de dotnet CLI (Opdrachtregelinterface).
Opmerking
De dotnet complete opdracht is alleen beschikbaar in versie 2.0 en hoger van de 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
Met de eerste opdracht maakt u een scriptblok dat de vereiste parameters gebruikt, die worden doorgegeven wanneer de gebruiker op Tab-drukt. Zie de beschrijving van de parameter ScriptBlock voor meer informatie.
In het scriptblok voert de opdracht dotnet complete de tabvoltooiing uit. De resultaten worden doorgesluisd naar de ForEach-Object-cmdlet, die gebruikmaakt van de nieuwe statische methode van de klasse System.Management.Automation.CompletionResult om voor elke waarde een CompletionResult-object te maken.
Parameters
-CommandName
Hiermee geeft u de naam van een of meer opdrachten voor het registreren van de argument completer voor. Deze parameter is verplicht voor systeemeigen opdrachten.
Wanneer u deze parameter opgeeft zonder parameternaam parameternaam of systeemeigen parameters, gedraagt de opdracht zich alsof u de parameter Native hebt opgegeven. Wanneer u argument completers registreert voor PowerShell-opdrachten, geeft u altijd de parameter ParameterName op.
Als u deze parameter niet opgeeft, registreert PowerShell de argument-completer voor de opgegeven ParameterName voor alle PowerShell-opdrachten.
Parametereigenschappen
| Type: | String[] |
| Default value: | None |
| Ondersteunt jokertekens: | False |
| DontShow: | False |
Parametersets
NativeSet
| Position: | Named |
| Verplicht: | True |
| Waarde uit pijplijn: | False |
| Waarde uit pijplijn op eigenschapsnaam: | False |
| Waarde van resterende argumenten: | False |
PowerShellSet
| Position: | Named |
| Verplicht: | False |
| Waarde uit pijplijn: | False |
| Waarde uit pijplijn op eigenschapsnaam: | False |
| Waarde van resterende argumenten: | False |
-Native
Geeft aan dat de argument completer is voor een systeemeigen opdracht waarbij PowerShell geen parameternamen kan voltooien.
Parametereigenschappen
| Type: | SwitchParameter |
| Default value: | None |
| Ondersteunt jokertekens: | False |
| DontShow: | False |
Parametersets
NativeSet
| Position: | Named |
| Verplicht: | False |
| Waarde uit pijplijn: | False |
| Waarde uit pijplijn op eigenschapsnaam: | False |
| Waarde van resterende argumenten: | False |
-ParameterName
Hiermee geeft u de naam van de parameter op waar de argument completer op van toepassing is. Het type voor opgegeven parameters kan geen opsomming zijn, zoals de parameter ForegroundColor van de cmdlet Write-Host.
Zie about_Enumvoor meer informatie over opsommingen.
Wanneer u een argument completer registreert voor PowerShell-opdrachten, geeft u altijd deze parameter op. Wanneer u de parameter CommandName zonder de parameter ParameterName of Native parameters opgeeft, gedraagt de opdracht zich alsof u de parameter Native hebt opgegeven.
Parametereigenschappen
| Type: | String |
| Default value: | None |
| Ondersteunt jokertekens: | False |
| DontShow: | False |
Parametersets
PowerShellSet
| Position: | Named |
| Verplicht: | True |
| Waarde uit pijplijn: | False |
| Waarde uit pijplijn op eigenschapsnaam: | False |
| Waarde van resterende argumenten: | False |
-ScriptBlock
Hiermee geeft u de opdrachten die moeten worden uitgevoerd om tabvoltooiing uit te voeren. Het scriptblok dat u opgeeft, moet de waarden retourneren die de invoer voltooien. Het scriptblok moet de waarden uitschrijven met behulp van de pijplijn (ForEach-Object, Where-Object, enzovoort) of een andere geschikte methode. Als u een matrix met waarden retourneert, wordt de hele matrix door PowerShell behandeld als één tabvoltooiingswaarde.
Het scriptblok kan ook System.Management.Automation.CompletionResult objecten retourneren voor elke waarde om de gebruikerservaring te verbeteren. Als u CompletionResult objecten retourneert, kunt u knopinfo en aangepaste lijstitems definiëren die worden weergegeven wanneer gebruikers op Ctrl+Spatiebalk drukken om de lijst met beschikbare voltooiingen weer te geven.
Het scriptblok moet de volgende parameters accepteren in de onderstaande volgorde. De namen van de parameters zijn niet belangrijk omdat PowerShell de waarden op positie doorgeeft.
-
$commandName(positie 0, tekenreeks) - Deze parameter is ingesteld op de naam van de opdracht waarvoor het scriptblok tabvoltooiing biedt. -
$parameterName(positie 1, tekenreeks) - Deze parameter is ingesteld op de parameter waarvan de waarde tabvoltooiing vereist. -
$wordToComplete(positie 2, tekenreeks) - Deze parameter is ingesteld op de waarde die de gebruiker heeft opgegeven voordat deze op Tab-drukt. Uw scriptblok moet deze waarde gebruiken om de waarden voor tabvoltooiing te bepalen. -
$commandAst(Positie 3, CommandAst) - Deze parameter is ingesteld op de abstracte syntaxisstructuur (AST) voor de huidige invoerregel. Zie CommandAst Classvoor meer informatie. -
$fakeBoundParameters(Position 4 IDictionary) - Deze parameter is ingesteld op een hashtabel met de$PSBoundParametersvoor de cmdlet, voordat de gebruiker op Tab-heeft gedrukt. Zie about_Automatic_Variablesvoor meer informatie.
Wanneer u de parameter Native opgeeft, moet het scriptblok de volgende parameters in de opgegeven volgorde hebben. De namen van de parameters zijn niet belangrijk omdat PowerShell de waarden op positie doorgeeft.
-
$wordToComplete(positie 0, tekenreeks) - Deze parameter is ingesteld op de waarde die de gebruiker heeft opgegeven voordat deze op Tab-drukt. Uw scriptblok moet deze waarde gebruiken om de waarden voor tabvoltooiing te bepalen. -
$commandAst(positie 1, CommandAst) - Deze parameter is ingesteld op de ast (Abstract Syntax Tree) voor de huidige invoerregel. Zie CommandAst Classvoor meer informatie. -
$cursorPosition(Positie 2, Int32) - Deze parameter wordt ingesteld op de positie van de cursor wanneer de gebruiker op Tab-heeft gedrukt.
U kunt ook een ArgumentCompleter opgeven als parameterkenmerk. Zie about_Functions_Advanced_Parametersvoor meer informatie.
Parametereigenschappen
| Type: | ScriptBlock |
| Default value: | None |
| Ondersteunt jokertekens: | False |
| DontShow: | False |
Parametersets
(All)
| Position: | Named |
| Verplicht: | True |
| Waarde uit pijplijn: | False |
| Waarde uit pijplijn op eigenschapsnaam: | False |
| Waarde van resterende argumenten: | False |
CommonParameters
Deze cmdlet ondersteunt de algemene parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction en -WarningVariable. Zie about_CommonParametersvoor meer informatie.
Invoerwaarden
None
U kunt geen objecten doorsluisen naar deze cmdlet.
Uitvoerwaarden
None
Deze cmdlet retourneert geen uitvoer.