In meinem letzten Blogeintrag [1] habe ich erklärt, wie die verschiedenen Befehle aussehen, die eine Benutzerverwaltung im AD und Exchange ermöglichen. Hier zeige ich nun, wie man sich nur mit PowerShell Befehlen eine kleine Oberfläche (GUI) baut, um das Handling weiter zu verbessern.

Die benötigten Module

Um grafische Oberflächen mit der PowerShell zu erzeugen benötigen wir folgende Module:

[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")

System.Windows.Forms ist hier dafür zuständig, dass man überhaupt ein Fenster und grafische Objekte erstellen kann. System.Drawing verwenden wir um die Größe und Position der einzelnen Elemente im Fenster zu bestimmen.

Das Fenster

Das Grundfenster unseres Dialogs erstellen wir wie folgt:

$window = New-Object System.Windows.Forms.Form
$window.Text = "New-User"
$window.Size = New-Object System.Drawing.Size(300,280) �
$window.StartPosition = "CenterScreen"

Nun erzeugen wir uns noch zwei Buttons OK und Cancel:

$OKButton = New-Object System.Windows.Forms.Button �
$OKButton.Text = "OK"
$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Text = "Cancel"

und fügen diese zum Fenster an einer festen Position hinzu:

$OKButton.Location = New-Object System.Drawing.Size(75,200)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$window .Controls.Add($OKButton)

$CancelButton.Location = New-Object System.Drawing.Size(150,200) $CancelButton.Size = New-Object System.Drawing.Size(75,23)
$window .Controls.Add($CancelButton)

Damit beim Klick auf den Button Cancel das Fenster geschlossen wird, fügen wir diese Aktion noch hinzu:

$CancelButton.Add_Click({$objForm.Close()})

Mehrere Funktionen kann man wie folgt zum Button OK hinzufügen:

$OKButton.Add_Click({$objForm.Close(); $success = $TRUE})

Textfelder

Damit man über den Dialog auch Informationen abfragen kann, verwenden wir Textfelder. Diese erzeugt man ähnlich zum Button mit folgendem Befehl:

$FirstnameTB = New-Object System.Windows.Forms.TextBox

Auch diese müssen zum Fenster hinzugefügt werden:

$FirstnameTB.Location = New-Object System.Drawing.Size(90,20)
$FirstnameTB.Size = New-Object System.Drawing.Size(120,20)
$objForm.Controls.Add($FirstnameTB)

Im weiteren Verlauf des Programms kann man dann über den Befehl FirstnameTB.Text auf den Inhalt zugreifen:

$firstname = $FirstnameTB.Text

Radiobuttons

Um einfache Auswahlen zwischen einer begrenzten Zahl an Möglichkeiten zu realisieren, verwendet man gerne die sogenannten Radiobuttons. Wenn man sie zu einer Gruppe vereint, ist es dem Benutzer immer nur erlaubt eine der Möglichkeiten zu wählen. Hiermit kann man falsche Eingaben leicht verhindern. Man erzeugt einen Radiobutton wie folgt:

$radio1 = New-Object System.Windows.Forms.RadioButton

Mit

$radio1.Text = "Beschriftung"

gibt man dem RadioButton eine Beschriftung.

Um die Auswahl auf ein Element zu beschränken, nimmt man nun seine RadioButtons und setzt sie zu einer Gruppe zusammen:

$RadioGroup = New-Object System.Windows.Forms.GroupBox
$RadioGroup.Controls.Add($radio1)
$RadioGroup.Controls.Add($radio2)

Um später im Programm zu erfahren, ob ein Button ausgewählt ist, verwendet man $radio1.Checked. Dieser liefert True oder False zurück. Hier ist zu beachten, dass der Vergleich über -eq "True" geschehen muss. Der PowerShell übliche Vergleich -eq $True funktioniert nicht.

[1] http://www.escde.net/2013/01/25/benutzerverwaltung-im-ad-uber-powershell-skripte/