Dela via


Register-ArgumentCompleter

Registrerar en komplettering av ett anpassat argument.

Syntax

NativeSet

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

PowerShellSet

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

Description

Cmdleten Register-ArgumentCompleter registrerar en anpassad argument-completer. Med en argumentföreläsning kan du ange dynamisk flikavslut, vid körning för alla kommandon som du anger.

Exempel

Exempel 1: Registrera en slutförd anpassad argument

I följande exempel registreras en argument completer för parametern ID för Set-TimeZone-cmdleten.

$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 nödvändiga parametrarna som skickas in när användaren trycker på Tabb. Mer information finns i beskrivningen av parametern ScriptBlock .

I skriptblocket hämtas tillgängliga värden för ID med hjälp av cmdleten Get-TimeZone. Egenskapen ID för varje tidszon skickas till cmdleten Where-Object. Cmdleten Where-Object filtrerar bort alla ID:n som inte börjar med det värde som tillhandahålls av $wordToComplete, som representerar den text som användaren skrev innan de tryckte på Tabb. De filtrerade ID:na skickas till cmdleten ForEach-Object som omsluter varje värde inom citattecken, om värdet innehåller blanksteg.

Det andra kommandot registrerar argumentet completer genom att skicka scriptblock, ParameterNameID och CommandNameSet-TimeZone.

Exempel 2: Lägg till information i tabbavslutsvärdena

I följande exempel skrivs fliken över för parametern Name i 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 nödvändiga parametrarna som skickas in när användaren trycker på Tabb. Mer information finns i beskrivningen av parametern 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-objektet 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 (String) – Den text som ska användas som automatiskt slutföranderesultat. Det här är värdet som skickas till kommandot.
  • listItemText (String) – Texten som ska visas i en lista, till exempel när användaren trycker på Ctrl+Space. Detta används endast för visning och skickas inte till kommandot när det är valt.
  • 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 när Ctrl+Blanksteg.

Det sista kommandot visar att stoppade tjänster fortfarande kan skickas manuellt till cmdleten Stop-Service. Flikens slutförande är den enda aspekten som påverkas.

Exempel 3: Registrera en anpassad intern argument-completer

Du kan använda parametern Native för att tillhandahålla tab-completion för ett internt kommando. Följande exempel lägger till tab-completion för dotnet Kommandoradsgränssnitt (CLI).

Anmärkning

Kommandot dotnet complete är endast tillgängligt i version 2.0 och större 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 nödvändiga parametrarna som skickas in när användaren trycker på Tabb. Mer information finns i beskrivningen av parametern ScriptBlock .

I skriptblocket används kommandot dotnet complete för att slutföra fliken. Resultaten skickas till cmdleten ForEach-Object , som använder den nya statiska metoden i System.Management.Automation.CompletionResult klassen för att skapa ett nytt CompletionResult-objekt för varje värde.

Parametrar

-CommandName

Anger namnet på kommandona som en matris.

Parameteregenskaper

Typ:

String[]

Standardvärde:None
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

NativeSet
Position:Named
Obligatorisk:True
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument:False
PowerShellSet
Position:Named
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument:False

-Native

Anger att argumentexeparationen är för ett internt kommando där PowerShell inte kan slutföra parameternamn.

Parameteregenskaper

Typ:SwitchParameter
Standardvärde:None
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

NativeSet
Position:Named
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument: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.

Parameteregenskaper

Typ:String
Standardvärde:None
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

PowerShellSet
Position:Named
Obligatorisk:True
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument: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-Objectosv.) eller en annan lämplig metod. Om du returnerar en matris med värden kan PowerShell behandla hela matrisen som ett flikslutvärde.

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 tabbavslut för.
  • $parameterName (position 1) – Den här parametern är inställd på parametern vars värde kräver att fliken slutförs.
  • $wordToComplete (position 2) – Den här parametern är inställd på värdet som användaren har angett innan de tryckte på Tab. Skriptblocket bör använda det här värdet för att fastställa flikslutvä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 Class.
  • $fakeBoundParameters (position 4) – Den här parametern är inställd på en hashtable som innehåller $PSBoundParameters för cmdleten innan användaren tryckte på Tab. Mer information finns i about_Automatic_Variables.

När du anger parametern native 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å ett värde som användaren angav innan de tryckte på Tabb. Skriptblocket bör använda det här värdet för att fastställa värden för tabbifyllning.
  • $commandAst (Position 1) – Den här parametern är inställd på det abstrakta syntaxträdet (AST) för den aktuella indataraden. Mer information finns i Ast Class.
  • $cursorPosition (Position 2) - Den här parametern ställs in på markörens position när användaren tryckte på Tabb.

Du kan också ange ett ArgumentCompleter- som ett parameterattribut. Mer information finns i about_Functions_Advanced_Parameters.

Parameteregenskaper

Typ:ScriptBlock
Standardvärde:None
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:Named
Obligatorisk:True
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument:False

CommonParameters

Den här cmdleten stöder vanliga parametrar: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction och -WarningVariable. Mer information finns i about_CommonParameters.

Indata

None

Du kan inte skicka objekt till den här cmdleten.

Utdata

None

Den här cmdleten returnerar inga utdata.