Benutzereingaben in PowerShell: Read-Host, mandatory = $true, Out-GridView

    Teaser TastaturWill man ein inter­aktives Script entwickeln, dann muss die verwendete Sprache Eingaben des Benutzers entgegen­nehmen können. Das wichtigste Mittel von Power­Shell für diesen Zweck ist das Cmdlet Read-Host, in einigen Situa­tionen sind auch verpflich­tende function-Parameter oder Out-GridView hilfreich.

    Während der alte Kommandointerpreter auch für diese Aufgabe mit dem Befehl set /p Variable="Text für den Prompt" nur das Nötigste bietet, kann PowerShell Eingaben der Benutzer unter verschiedenen Bedingungen abfragen und diese anschließend auswerten.

    Input einlesen mit Read-Host

    Das gängigste Mittel, um eine Dateneingabe durch den Benutzer anzufordern, ist Read-Host. Im einfachsten Fall kann man es sogar ohne Parameter aufrufen, aber dann zeigt es keinen Prompt, der den Benutzer über den erwarteten Input informiert. Daher verwendet man es meistens nach diesem Muster:

    Read-Host -Prompt "Bitte geben Sie Ihren Namen ein!"

    Dieses Beispiel enthält den Namen des Parameters Prompt, den man aber auch weglassen kann. Der Text alleine reicht schon. Obiger Befehl führt dazu, dass der vom Benutzer eingegebene Text auf Stdout erscheint. Möchte man den Input weiterverarbeiten, etwa indem man die Zeichenkette zerteilt oder ersetzt, dann speichert man ihn zumeist in einer Variablen:

    $n = Read-Host -Prompt "Bitte geben Sie Ihren Namen ein!"

    Passwörter abfragen

    Read-Host besitzt auch die Fähigkeit, Passwörter in einen Secure String einzulesen. Dabei erscheint die Eingabe nicht im Klartext, sondern jedes Zeichen wird durch '*' repräsentiert, und das Ergebnis wird danach nicht angezeigt:

    Read-Host "Bitte geben Sie Ihr Kennwort ein!" -AsSecureString

    Das Objekt vom Typ System.Security.SecureString ließe sich für eine Reihe von Aufgaben verwenden, etwa um AD-Passwörter zu ändern oder die Anmelde­daten eines Benutzer zu überprüfen.

    Mit dem Schalter -AsSecureString zeigt Read-Host nicht den Klartext der Eingabe an.

    Eingabe für Parameter von Funktionen

    In einigen Fällen benötigt man keinen expliziten Aufruf eines Cmdlets, um die gewünschte Eingabe des Benutzers zu erhalten. Das gilt etwa für Funktionen, wenn man einen Parameter als mandatory deklariert. Wird für ihn kein Wert angegeben, dann fragt PowerShell danach.

    In diesem Beispiel muss der Funktion Get-Message der Parameter Nachricht übergeben werden, und sein Wert darf nicht die leere Zeichenkette sein. Ruft man die function aber ohne Argumente auf, dann erwartet PowerShell die interaktive Eingabe des erforderlichen Inputs.

    functions fordern den Wert für fehlende Parameter interaktiv an. Der Hilfetext muss extra abgerufen werden.

    Der unter HelpMessage festgelegte Text sollte den Benutzer Hinweise geben, welche Eingabe von ihm erwartet wird. Allerdings zeigt PowerShell diesen Hilfetext nicht automatisch an, wenn der Parameter vergessen wurde. Vielmehr muss ihn der User durch Eintippen von "!?" abrufen, ansonsten sieht er nur den Namen des erforderlichen Parameters als Prompt. Daher empfiehlt es sich, dafür sprechende Namen zu vergeben.

    Einfaches Menü mit Out-GridView

    Für den speziellen Fall, dass der Benutzer nur zwischen vorgegebenen Werten wählen soll und dafür ein grafisches Menü erwünscht ist, eignet sich das Cmdlet Out-GridView. Sein Zweck besteht normalerweise darin, tabellarisch darstellbare Daten auf der GUI anzuzeigen, wobei man diese durch Klicken auf die Spalten­überschriften sortieren kann.

    Das Cmdlet Out-GridView lässt sich für ein einfaches Menüsystem einsetzen.

    Ruft man Out-GridView mit dem Schalter -passthru auf, dann gibt das Cmdlet den Wert zurück, der vom Benutzer vor dem Bestätigen der Ok-Taste ausgewählt wurde:

    "Kopieren", "Löschen", "Anzeigen", "Mit Schreibschutz versehen" |
    Out-GridView -PassThru -Title "Dateioperation auswählen"

    In diesem Beispiel erhält Out-GridView 4 String-Objekte über die Pipeline und zeigt diese in einer grafischen Liste. Die Größe des Fensters lässt sich dabei nicht beeinflussen, so dass es bei einer kurzen Liste etwas überdimensioniert wirkt. Der Parameter title bestimmt die Beschriftung der oberen Fensterleiste fest.

    In der Regel wird man die Auswahl des Benutzers benötigen, um den Fortgang des Scripts zu steuern, etwa durch eine anschließende Fallunter­scheidung mit Hilfe eines switch-Statements. Zu diesem Zweck weist man die Ausgabe, wie oben bei Read-Host gezeigt, einer Variablen zu, die man dann prüfen kann.

    Keine Kommentare