Register-ArgumentCompleter
Registrerar en anpassad argument-slutförare.
Syntax
Register-ArgumentCompleter
-CommandName <String[]>
-ScriptBlock <ScriptBlock>
[-Native]
[<CommonParameters>]
Register-ArgumentCompleter
[-CommandName <String[]>]
-ParameterName <String>
-ScriptBlock <ScriptBlock>
[<CommonParameters>]
Description
Cmdleten Register-ArgumentCompleter
registrerar en slutförd anpassat argument. Med en argumentkompletterare kan du ange dynamisk tabbifyllning vid körning för alla kommandon som du anger.
Exempel
Exempel 1: Registrera en slutförd anpassat argument
I följande exempel registreras en argument-completer för Id-parametern för cmdleten Set-TimeZone
.
$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
Det första kommandot skapar ett skriptblock som tar de obligatoriska parametrar som skickas när användaren trycker på Tabb. Mer information finns i parameterbeskrivningen ScriptBlock .
I skriptblocket hämtas tillgängliga värden för ID med hjälp av cmdleten Get-TimeZone
. ID-egenskapen för varje tidszon skickas till cmdletenWhere-Object
. Cmdleten Where-Object
filtrerar bort alla ID:ar som inte börjar med värdet från $wordToComplete
, som representerar den text som användaren skrev innan de tryckte på Tabb. De filtrerade ID:na skickas till cmdleten For-EachObject
som omger varje värde inom citattecken om värdet innehåller blanksteg.
Det andra kommandot registrerar argument completer genom att skicka scriptblock, ParameterNameID och CommandNameSet-TimeZone
.
Exempel 2: Lägg till information i tabbslutvärdena
I följande exempel skrivs tabbifyllningen över för parametern Name för cmdleten Stop-Service
och returnerar endast tjänster som körs.
$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,
$_.Name,
"ParameterValue",
$_.Name
}
}
Register-ArgumentCompleter -CommandName Stop-Service -ParameterName Name -ScriptBlock $s
Det första kommandot skapar ett skriptblock som tar de obligatoriska parametrar som skickas när användaren trycker på Tabb. Mer information finns i parameterbeskrivningen ScriptBlock .
I skriptblocket hämtar det första kommandot alla tjänster som körs med hjälp av cmdleten Where-Object
. Tjänsterna skickas till cmdleten ForEach-Object
. Cmdleten ForEach-Object
skapar ett nytt System.Management.Automation.CompletionResult-objekt och fyller det med namnet på den aktuella tjänsten (representeras av pipelinevariabeln $_.Name
).
Med CompletionResult-objektet kan du ange ytterligare information för varje returnerat värde:
- completionText (Sträng) – Den text som ska användas som resultat av automatisk slutförande. Det här är värdet som skickas till kommandot .
- listItemText (Sträng) – Den text som ska visas i en lista, till exempel när användaren trycker påCtrl-blanksteg+. Detta används endast för visning och skickas inte till kommandot när det väljs.
- resultType (CompletionResultType) – Typ av slutföranderesultat.
- toolTip (String) – Texten för knappbeskrivningen med information som ska visas om objektet. Detta visas när användaren väljer ett objekt efter att ha tryckt påCtrl-blanksteg+.
Det sista kommandot visar att stoppade tjänster fortfarande kan skickas manuellt till cmdleten Stop-Service
. Tabbifyllningen är den enda aspekt som påverkas.
Exempel 3: Registrera en anpassad intern argument-slutförare
Du kan använda den interna parametern för att tillhandahålla tabbifyllning för ett internt kommando. I följande exempel läggs tabbifyllning till för kommandoradsgränssnittet dotnet
(CLI).
Anteckning
Kommandot dotnet complete
är endast tillgängligt i version 2.0 och senare av dotnet cli.
$scriptblock = {
param($wordToComplete, $commandAst, $cursorPosition)
dotnet complete --position $cursorPosition $commandAst.ToString() | ForEach-Object {
[System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
}
}
Register-ArgumentCompleter -Native -CommandName dotnet -ScriptBlock $scriptblock
Det första kommandot skapar ett skriptblock som tar de obligatoriska parametrar som skickas när användaren trycker på Tabb. Mer information finns i parameterbeskrivningen ScriptBlock .
I skriptblocket dotnet complete
används kommandot för att utföra tabbifyllningen.
Resultatet skickas till cmdleten ForEach-Object
som använder den nya statiska metoden i klassen System.Management.Automation.CompletionResult för att skapa ett nytt CompletionResult-objekt för varje värde.
Parametrar
-CommandName
Anger namnet på kommandona som en matris.
Type: | String[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Native
Anger att argument completer är för ett internt kommando där PowerShell inte kan slutföra parameternamn.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ParameterName
Anger namnet på parametern vars argument håller på att slutföras. Det angivna parameternamnet får inte vara ett uppräknat värde, till exempel parametern ForegroundColor för cmdleten Write-Host
.
Mer information om uppräkningar finns i about_Enum.
Type: | String |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ScriptBlock
Anger vilka kommandon som ska köras för att slutföra fliken. Skriptblocket som du anger ska returnera de värden som slutför indata. Skriptblocket måste avregistrera värdena med hjälp av pipelinen (ForEach-Object
, Where-Object
osv.) eller en annan lämplig metod. Om du returnerar en matris med värden behandlar PowerShell hela matrisen som ett slutförandevärde för en flik.
Skriptblocket måste acceptera följande parametrar i den ordning som anges nedan. Namnen på parametrarna är inte viktiga eftersom PowerShell skickar värdena efter position.
$commandName
(Position 0) – Den här parametern är inställd på namnet på det kommando som skriptblocket tillhandahåller tabbifyllning för.$parameterName
(Position 1) – Den här parametern är inställd på den parameter vars värde kräver tabbifyllning.$wordToComplete
(Position 2) – Den här parametern är inställd på det värde som användaren har angett innan de trycker på Tabb. Skriptblocket bör använda det här värdet för att fastställa tabbifyllningsvärden.$commandAst
(Position 3) – Den här parametern är inställd på AST (Abstract Syntax Tree) för den aktuella indataraden. Mer information finns i Ast-klass.$fakeBoundParameters
(Position 4) – Den här parametern är inställd på en hash-tabell som innehåller$PSBoundParameters
för cmdleten innan användaren tryckte på Tabb. Mer information finns i about_Automatic_Variables.
När du anger den interna parametern måste skriptblocket ha följande parametrar i den angivna ordningen. Namnen på parametrarna är inte viktiga eftersom PowerShell skickar värdena efter position.
$wordToComplete
(Position 0) – Den här parametern är inställd på det värde som användaren har angett innan de trycker på Tabb. Skriptblocket bör använda det här värdet för att fastställa tabbifyllningsvärden.$commandAst
(Position 1) – Den här parametern är inställd på AST (Abstract Syntax Tree) för den aktuella indataraden. Mer information finns i Ast-klass.$cursorPosition
(Position 2) – Den här parametern är inställd på markörens position när användaren tryckte på Tabb.
Du kan också ange en ArgumentCompleter som ett parameterattribut. Mer information finns i about_Functions_Advanced_Parameters.
Type: | ScriptBlock |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Indata
None
Du kan inte skicka objekt till den här cmdleten.
Utdata
None
Denna cmdlet returnerar inga utdata.