2013-06-14 10 views
8

Ho una grande lista di dati (oltre 1000 valori diversi) e voglio che l'utente sia in grado di selezionare determinati valori dall'elenco da una console PowerShell.Ingresso utente automatico completo PowerShell 2.0

Qual è il modo più semplice all'interno della console per consentire all'utente di selezionare rapidamente i valori?

Vorrei fare qualcosa come il completamento della tabulazione o la possibilità di usare i tasti freccia per scorrere i valori, ma non sono sicuro di come fare una di queste cose.

Qualsiasi consiglio sarebbe molto apprezzato.

risposta

7

Il completamento della scheda di PowerShell può essere esteso ai parametri personalizzati e ai valori dei parametri (in v3). Tuttavia, questa è una proprietà di funzioni avanzate. Puoi usare lo ValidateSetAttribute per farlo.

Controllare l'argomento Technet aiuto sulle funzioni avanzate: http://technet.microsoft.com/en-us/library/hh847806.aspx

È possibile sostituire la funzione tabexpansion2 (v3) tabexpansion (v2) e in PowerShell per i valori dei parametri completi auto al di fuori di funzioni avanzate. È possibile ottenere una definizione di base di questo in PowerShell v3 eseguendo

Get-Content function:TabExpansion2 

Ecco un esempio di mostrare la funzione di espansione scheda personalizzata.

http://www.powershellmagazine.com/2012/11/29/using-custom-argument-completers-in-powershell-3-0/

Ma, se si vuole che l'utente sia in grado di auto valori complete per un Read-Host tipo di input, è necessario scrivere un proxy per Read-Host a raggiungere questo obiettivo.

È possibile, opzionalmente, guarda modulo PowerTab a http://powertab.codeplex.com/

+0

Grazie per la risposta! Sfortunatamente sono limitato a utilizzare solo v2, quindi esaminerò la funzione tabexpansion. – esap120

+0

Puoi anche guardare il modulo PowerTab. http://powertab.codeplex.com/ – ravikanth

1

Per le persone che sono alla ricerca di un modo per fare questo e sono abbastanza fortunati di utilizzare PS v3 (e le mie scuse per tutti quelli necessari per stare con V2):

Il modo più semplice per ottenere ciò è utilizzare l'opzione "ValidateSet" nei parametri di input.

function Show-Hello { 
param (
    [ValidateSet("World", "Galaxy", "Universe")] 
    [String]$noun 
) 
$greetingString = "Hello, " + $noun + "!" 
Write-Host "`t=>`t" $greetingString "`t<=" 
} 

ValidateSet genera un errore se un utente tenta di utilizzare qualsiasi altro ingresso:

Show-Hello "Solar System" 

    Show-Hello : Cannot validate argument on parameter 'noun'. The argument ` 
    "Solar System" does not belong to the set "World,Galaxy,Universe" specified ` 
    by the ValidateSet attribute. Supply an argument that is in the set and ` 
    then try the command again. 

Si aggiunge anche scheda di completamento per la funzione per quel parametro. E se è il primo parametro per la tua funzione, non devi neanche digitare "-noun" per il tab-complete per dare suggerimenti sul suo valore.

Problemi correlati