Sie können wiederkehrende Aufgaben mit interaktiven PowerShell-Skripten automatisieren.
Eine Einführung in die Abfrage von Eingabewerten mit Interaktive PowerShell.
Index
Nutzen für die Automatisierung
PowerShell Skripte sind ein beliebtes Mittel um wiederkehrende Aufgaben im Windows-Umfeld zu automatisieren:
Der Anwender startet ein Skript, das Skript arbeitet eine Aufgabe ab, fertig!
- Was aber, wenn das Skript auf Entscheidungen und Angaben von Anwendern angewiesen ist?
- Welche Ordner sollen gesichert werden?
- Wie heißt der neue anzulegende Mitarbeiter?
Hierfür bietet PowerShell einige sehr mächtige Möglichkeiten mit dem Anwender zu interagieren. Diese werden im Folgenden beschrieben.
Einfache Abfragen durch interaktive PowerShell Skripte
Im ersten Teil sollen einfache Nutzereingaben per PowerShell abgefragt werden.
Dies bedeutet, dass der Skript nach der Eingabe einer abgefragten Information fortgesetzt wird.
Um mehrere Informationen abzufragen, bevor der Skript weiterläuft, lesen Sie bitte hier weiter.
Einfache Abfrage von Werten mit Read-Host
Die einfachste Abfrage von Nutzereingaben bietet das Cmdlet Read-Host.
1 |
$name = Read-Host 'What is your name?' |
Und so sieht die Ausgabe aus:
Der Anwender wird nach einer Eingabe gefragt und erst nachdem er einen (beliebigen) Text eingegeben hat, wird die Skriptausführung fortgesetzt. Der eingegebene String-Wert wird im Beispiel in der Variable name gespeichert. Read-Host führt dabei keine Validierung der Eingabe durch. D.h. Read-Host akzeptiert auch eine leere / keine Eingabe (der Anwender gibt nur Enter ein) oder vom Skript nicht zu verarbeitende Werte (z.B. das Skript erwartet eine Zahl, der Anwender gibt jedoch einen Buchstaben ein). Daher empfiehlt es sich, den erhaltenen Wert vor der weiteren Abarbeitung zu prüfen.
Read-Host bietet darüber hinaus die Möglichkeit der sicheren Abfrage.
1 |
$password = Read-Host 'What is your password?' -AsSecureString |
Hier die Ausgabe:
Die Ausgabe zeigt dem Anwender statt der eingegebenen Buchstaben nur Sternchen (*) an. Diese Art der Eingabe bietet sich für Passwörter oder andere sicherheitskritischen Eingaben an. Read-Host gibt in diesem Fall den übermittelten Wert in einem besonders gesicherten SecureString zurück.
Nutzerbestätigungen mit –Confirm
Alle Cmdlets welche auf die eine oder andere Art das System beeinflussen bieten die Möglichkeit, den Nutzer nach einer Bestätigung der durchzuführenden Aktion zu fragen. Hierfür gibt es den Parameter –Confirm.
1 |
Remove-Item empty.txt -Confirm:$Y |
Dies sieht folgendermaßen aus:
Dem Nutzer wird je nach Cmdlet eine Reihe von Wahlmöglichkeiten gegeben. Im Beispiel ist eine Vorauswahl angegeben, welche standartmäßig ausgewählt wird, wenn der Nutzer die Eingabe mit Enter beendet. In diesem Fall „Y“ für Yes (Ja). Je nach getroffener Wahl führt das Cmdlet die Aktion durch oder bricht die Aktion ab.
PromptForChoice – den Anwender wählen lassen
Diese Art von Wahlmöglichkeit, welche –Confirm anbietet, ist nicht nur auf einfache Sicherheitsabfragen beschränkt. Die Abfragen lassen sich leicht mit PromptForChoice umsetzen und anpassen.
1 2 3 4 5 6 |
$title = "Add employee?" $message = "You want to add a new employee to your organisation?" $yes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes", "Yes" $no = New-Object System.Management.Automation.Host.ChoiceDescription "&No", "No" $options = [System.Management.Automation.Host.ChoiceDescription[]]($yes, $no) $choice=$host.ui.PromptForChoice($title, $message, $options, 1) |
So sieht die Ausgabe aus:
Der Nutzer hat hier die Möglichkeit aus einer der Wahlmöglichkeiten zu wählen. Gibt er nichts an, so wird die Vorauswahl übernommen. PromptForChoice gibt in jedem Fall die Feldposition (int) der ChoiceDescription zurück (Index beginnt mit 0) welche vom Anwender ausgewählt wurde. Das Beispiel nutzt 2 Wahlmöglichkeiten, es gibt jedoch keine Beschränkung der Anzahl.
Alternativ gibt es die Möglichkeit den Anwender mehrere Werte gleichzeitig auswählen zu lassen.
1 2 3 4 5 6 7 8 |
$title = "Backup" $message = "Please select resources for backup!" $option1 = New-Object System.Management.Automation.Host.ChoiceDescription "Personal &Account", "Account" $option2 = New-Object System.Management.Automation.Host.ChoiceDescription "Personal &Folder", "Folder" $option3 = New-Object System.Management.Automation.Host.ChoiceDescription "Personal &Database", "Database" $option4 = New-Object System.Management.Automation.Host.ChoiceDescription "&Public Folder", "Public" $options = [System.Management.Automation.Host.ChoiceDescription[]]($option1, $option2, $option3, $option4) $backup=$host.ui.PromptForChoice($title, $message, $options, [int[]](1)) |
Hier die passende Ausgabe:
In diesem Fall gibt PromtForChoice ein Feld mit den Positionen der vom Anwender ausgewählten Optionen zurück. Äquivalent können beim Aufruf mehrere Optionen angegeben werden, welche dann vorausgewählt werden. Hierzu wird ein Feld mit den Positionen der vorausgewählten Optionen angegeben (im Beispiel wird nur die zweite Option vorausgewählt).
Mehrere Werte gleichzeitig abfragen mit Prompt
Eine eher selten genutzte Möglichkeit für interaktive PowerShell Skripte ist die Abfrage mehrerer freier Eingabewerte auf einmal.
Ein Beispiel wäre die Logineingabe vom Anfang des Artikels.
Da Nutzername und Passwort zusammen gehören, können sie auch gleichzeitig abgefragt werden.
Dazu dient Prompt.
1 2 3 4 5 6 7 8 9 10 11 |
$title = "Login" $message = "Please enter your information to login!" $name = New-Object System.Management.Automation.Host.FieldDescription "Name" $name.Label = "&Login Name" $name.DefaultValue = "Guest" $pwd = New-Object System.Management.Automation.Host.FieldDescription "Password" $pwd.Label = "&Password" $pwd.SetparameterType( [System.Security.SecureString] ) $pwd.HelpMessage = "Please type your Password." $fields = [System.Management.Automation.Host.FieldDescription[]]($name, $pwd) $login=$Host.UI.Prompt($title, $message, $fields) |
Hier die entsprechende Ausgabe:
Der Anwender wird nacheinander nach den benötigten Werten gefragt und die Skriptausführung erst fortgesetzt, wenn alle Angaben vorliegen. Prompt gibt die erhaltenen Werte als Dictionary bzw. Hash-Tabelle zurück. Für jede abgefragte Eingabe gibt es einen Tabelleneintrag. Der Schlüssel ist dabei die Bezeichnung der FieldDescription (im Beispiel „Name“ und „Password“) und der Wert der vom Anwender eingegebene Wert.
PowerShell Skripten fehlen anwenderfreundliche Oberflächen. Mit dem IDM-Portal werden PS-Skripte zur Automatisierung in absolut anwenderfreundliche Weboberflächen eingebunden.
So wird die AD Datenpflege leicht, automatisiert und für alle zugänglich.
Mit der Delegation ist es möglich, bestimmte Aufgaben zu delegieren. Die Personalabteilung kann so z.B. einen neuen Benutzer anlegen.
Die letzte Version von PowerShell kann mit dem Windows Management Framework heruntegladen werden.
PowerShell mit einer Anwenderfreundlichen Oberfläche
PowerShell Skripten fehlen anwenderfreundliche Oberflächen. Mit dem IDM-Portal werden PS-Skripte zur Automatisierung in absolut anwenderfreundliche Weboberflächen eingebunden.
So wird die AD Datenpflege leicht, automatisiert und für alle zugänglich.
Mit der Delegation ist es möglich, bestimmte Aufgaben zu delegieren. Die Personalabteilung kann so z.B. einen neuen Benutzer anlegen.
Kontaktieren Sie uns gern für ein unverbindliches Gespräch.
Leave a Reply
<p>Danke für Ihre Anregungen, Fragen und Hinweise.<br/>Infos zum <a href="https://www.active-directory-faq.dekontakt/">Datenschutz</a></p>