Register-ArgumentCompleter
Registra un completore di argomenti personalizzato.
Sintassi
Register-ArgumentCompleter
-CommandName <String[]>
-ScriptBlock <ScriptBlock>
[-Native]
[<CommonParameters>]
Register-ArgumentCompleter
[-CommandName <String[]>]
-ParameterName <String>
-ScriptBlock <ScriptBlock>
[<CommonParameters>]
Descrizione
Il Register-ArgumentCompleter
cmdlet registra un completore di argomenti personalizzato. Un completore di argomenti consente di fornire il completamento di schede dinamiche, in fase di esecuzione per qualsiasi comando specificato.
Esempio
Esempio 1: Registrare un completore di argomenti personalizzato
Nell'esempio seguente viene registrato un completore di argomenti per il parametro Id del Set-TimeZone
cmdlet .
$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
Il primo comando crea un blocco di script che accetta i parametri obbligatori passati quando l'utente preme TAB. Per altre informazioni, vedere la descrizione del parametro ScriptBlock .
All'interno del blocco di script, i valori disponibili per ID vengono recuperati usando il Get-TimeZone
cmdlet . La proprietà Id per ogni fuso orario viene inviata tramite pipe al Where-Object
cmdlet . Il Where-Object
cmdlet filtra tutti gli ID che non iniziano con il valore fornito da $wordToComplete
, che rappresenta il testo digitato dall'utente prima di premere TAB. Gli ID filtrati vengono inviati tramite pipe al ForEach-Object
cmdlet che racchiude ogni valore tra virgolette, se il valore contiene spazi.
Il secondo comando registra il completer dell'argomento passando lo scriptblock, l'ID ParameterNamee il CommandNameSet-TimeZone
.
Esempio 2: Aggiungere dettagli ai valori di completamento della scheda
L'esempio seguente sovrascrive il completamento della scheda per il parametro Name del Stop-Service
cmdlet e restituisce solo i servizi in esecuzione.
$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
Il primo comando crea un blocco di script che accetta i parametri obbligatori passati quando l'utente preme TAB. Per altre informazioni, vedere la descrizione del parametro ScriptBlock .
All'interno del blocco di script, il primo comando recupera tutti i servizi in esecuzione usando il Where-Object
cmdlet . I servizi vengono inviati tramite pipe al ForEach-Object
cmdlet . Il ForEach-Object
cmdlet crea un nuovo oggetto System.Management.Automation.CompletionResult e lo popola con il nome del servizio corrente (rappresentato dalla variabile $_.Name
della pipeline ).
L'oggetto CompletionResult consente di fornire dettagli aggiuntivi a ogni valore restituito:
- completionText (String) - Testo da usare come risultato di completamento automatico. Questo è il valore inviato al comando.
- listItemText (String) - Testo da visualizzare in un elenco, ad esempio quando l'utente preme CTRL+SPAZIO. Viene usato solo per la visualizzazione e non viene passato al comando quando selezionato.
- resultType (CompletionResultType): tipo di risultato di completamento.
- toolTip (String) - Testo della descrizione comando con i dettagli da visualizzare sull'oggetto. Questa opzione è visibile quando l'utente seleziona un elemento dopo aver premuto CTRL+SPAZIO.
L'ultimo comando dimostra che i servizi arrestati possono comunque essere passati manualmente al Stop-Service
cmdlet . Il completamento della scheda è l'unico aspetto interessato.
Esempio 3: Registrare un completore di argomenti nativi personalizzato
È possibile usare il parametro Native per fornire il completamento tramite tabulazione per un comando nativo. Nell'esempio seguente viene aggiunto il completamento tramite tabulazione per l'interfaccia della dotnet
riga di comando .
Nota
Il dotnet complete
comando è disponibile solo nella versione 2.0 e successiva dell'interfaccia della riga di comando dotnet.
$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
Il primo comando crea un blocco di script che accetta i parametri obbligatori passati quando l'utente preme TAB. Per altre informazioni, vedere la descrizione del parametro ScriptBlock .
All'interno del blocco di script, il dotnet complete
comando viene usato per eseguire il completamento della scheda.
I risultati vengono inviati tramite pipe al ForEach-Object
cmdlet che utilizzano il nuovo metodo statico della classe System.Management.Automation.CompletionResult per creare un nuovo oggetto CompletionResult per ogni valore.
Parametri
-CommandName
Specifica il nome dei comandi come matrice.
Type: | String[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Native
Indica che l'argomento completer è per un comando nativo in cui PowerShell non può completare i nomi dei parametri.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ParameterName
Specifica il nome del parametro il cui argomento viene completato. Il nome del parametro specificato non può essere un valore enumerato, ad esempio il parametro ForegroundColor del Write-Host
cmdlet.
Per altre informazioni sulle enumerazioni, vedere about_Enum.
Type: | String |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ScriptBlock
Specifica i comandi da eseguire per eseguire il completamento della scheda. Il blocco di script specificato deve restituire i valori che completano l'input. Il blocco di script deve annullare la registrazione dei valori usando la pipeline (ForEach-Object
, Where-Object
e così via) o un altro metodo appropriato. Se si restituisce una matrice di valori, PowerShell considera l'intera matrice come un valore di completamento tramite tabulazione.
Il blocco di script deve accettare i parametri seguenti nell'ordine specificato di seguito. I nomi dei parametri non sono importanti perché PowerShell passa i valori in base alla posizione.
$commandName
(Posizione 0): questo parametro viene impostato sul nome del comando per il quale il blocco di script fornisce il completamento tramite tabulazione.$parameterName
(Posizione 1): questo parametro è impostato sul parametro il cui valore richiede il completamento della scheda.$wordToComplete
(Posizione 2): questo parametro è impostato sul valore fornito dall'utente prima di premere TAB. Il blocco di script deve usare questo valore per determinare i valori di completamento della scheda.$commandAst
(Posizione 3): questo parametro è impostato sull'albero della sintassi astratta (AST) per la riga di input corrente. Per altre informazioni, vedere Classe Ast.$fakeBoundParameters
(Posizione 4): questo parametro è impostato su una tabella hash contenente per$PSBoundParameters
il cmdlet, prima che l'utente preme tab. Per altre informazioni, vedere about_Automatic_Variables.
Quando si specifica il parametro Native , il blocco di script deve accettare i parametri seguenti nell'ordine specificato. I nomi dei parametri non sono importanti perché PowerShell passa i valori in base alla posizione.
$wordToComplete
(Posizione 0): questo parametro è impostato sul valore specificato dall'utente prima di premere TAB. Il blocco di script deve usare questo valore per determinare i valori di completamento della scheda.$commandAst
(Posizione 1): questo parametro è impostato sull'albero della sintassi astratta (AST) per la riga di input corrente. Per altre informazioni, vedere Classe Ast.$cursorPosition
(Posizione 2): questo parametro viene impostato sulla posizione del cursore quando l'utente ha premuto TAB.
È anche possibile specificare argumentCompleter come attributo di parametro. Per altre informazioni, vedere about_Functions_Advanced_Parameters.
Type: | ScriptBlock |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Input
None
Non è possibile inviare tramite pipe oggetti a questo cmdlet.
Output
None
Questo cmdlet non restituisce output.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: nel corso del 2024 verranno dismessi i problemi di GitHub come meccanismo di feedback per il contenuto e verranno sostituiti con un nuovo sistema di feedback. Per altre informazioni, vedere:Invia e visualizza il feedback per