2013-06-14 7 views
8

Ich habe eine große Liste von Daten (über 1000 verschiedene Werte) und möchte, dass der Benutzer bestimmte Werte aus der Liste von einer PowerShell-Konsole auswählen kann.Auto Complete Benutzereingabe PowerShell 2.0

Was ist der einfachste Weg innerhalb der Konsole, damit der Benutzer schnell Werte auswählen kann?

Ich möchte etwas wie Tab-Vervollständigung oder die Fähigkeit, die Pfeiltasten zu verwenden, um durch die Werte zu scrollen, aber ich bin mir nicht sicher, wie Sie eines dieser beiden Dinge tun.

Jeder Rat würde sehr geschätzt werden.

Antwort

7

Die Beendigung der PowerShell-Registerkarte kann auf benutzerdefinierte Parameter und Parameterwerte (in v3) erweitert werden. Dies ist jedoch eine Eigenschaft von erweiterten Funktionen. Sie können dazu die ValidateSetAttribute verwenden.

die Technet Hilfethema auf erweiterte Funktionen überprüfen: http://technet.microsoft.com/en-us/library/hh847806.aspx

Sie können Auto-Vervollständigen-Parameterwerte außerhalb der erweiterten Funktionen des tabexpansion (v2) und tabexpansion2 (v3) Funktion in Powershell ersetzen. Sie können eine grundlegende Definition dieses in Powershell v3 erhalten, indem

Get-Content function:TabExpansion2 

Hier läuft ein Beispiel benutzerdefinierte Registerkarte Erweiterungsfunktion zeigt.

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

Aber, wenn Sie an den Benutzer möchte in der Lage zu Auto-Vervollständigen-Werte für eine Read-Host Art von Input, benötigen Sie einen Proxy schreiben für Read-Host das zu erreichen.

Sie können optional buchen PowerTab Modul bei http://powertab.codeplex.com/

+0

Danke für die Antwort! Leider bin ich darauf beschränkt, nur v2 zu verwenden, also werde ich in die tabexpansion Funktion schauen. – esap120

+0

Sie können sich auch das PowerTab-Modul ansehen. http://powertab.codeplex.com/ – ravikanth

1

Für Leute, die nach einer Möglichkeit suchen, dies zu tun und sind glücklich genug PS v3 werden (und ich entschuldige mich für alle, die erforderlich ist, mit zu bleiben V2):

Der einfachste Weg, dies zu erreichen, ist die Verwendung der Option "ValidateSet" in Ihren Eingabeparametern.

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

ValidateSet wirft einen Fehler, wenn ein Benutzer einen beliebigen anderen Eingang zu benutzen versucht:

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. 

Es ist auch Tab-Vervollständigung auf Ihre Funktion für diesen Parameter erstellt. Und wenn es der erste Parameter für Ihre Funktion ist, müssen Sie nicht einmal "-noun" für den Tab-Complete eingeben, um Vorschläge für seinen Wert zu machen.