PowerShell Kurs

Sie finden auf der MSXFAQ ja eine ganze Menge von Seiten rund um das Thema PowerShell und vielleicht habe Ich sie ja neugierig gemacht. Da stellt sich natürlich die Frage, wie man sich dem Thema so nähert, dass man von der Sprache etwas lernt aber möglichst schnell auch an einem praktischen Beispiel etwas erproben kann. Ich habe mir dazu mal ein kleines Storyboard überlegt. Ich nutze einfach die Aufgabenstellung, aus einer CSV-Datei Benutzer oder Kontakte im AD zu erstellen und gegebenenfalls danach für Exchange zu aktivieren.

Voraussetzungen

Die Voraussetzungen für einen solchen einfachen Kurs sind relativ überschaubar und bedürfen eigentlich nur einer virtuellen Maschine, die zugleich Windows 2008 Domänencontroller und optional auch Exchange 2010 Server ist.

Weiterhin benötigen wir eine CSV-Datei, die als Datenquelle für Anwender herangezogen werden kann. Das Format kann dabei recht einfach sein, z.B.:

displayname,vorname,nachname,alias,mail,telephone User 1,Vorname1,Nachname1,alias1,mail1@example.com,11111111 User 2,Vorname2,Nachname2,alias2,mail2@example.com,22222222 User 3,Vorname3,Nachname3,alias3,mail3@example.com,22222222

Und natürlich eine installierte PowerShell mit ISE, PowerGUI oder auch einfach nur einem Texteditor wie Notepad++.

Stufen

Einen "Programmierkurs" kann diese Seite nicht abbilden aber sehr wohl die wichtigen Komponenten aufführen, die ein Administrator mit Kenntnissein in VBA, VBScript, JavaScript o.ä. doch mit bringt.

Stufe Themen Lernziel
0

PowerShell basics.  Variablen, Schleifen, IF-Abfrangen, Pipeline PowerShell “onlinert, PSDrive Provider (REG, CERT, FILE

Wie Sie eine PowerShell starten ist sicher nicht schwer. Und wir man ein Commandlet aufruft ist auch noch einfach. Ein "$a=get-process" ist schon der erste Schritt um Variablen zu lernen. $a[0] zeigt dann das erste Element an.

Weiterhin können Dateien einfach mit Get-Item oder Get-ChildItem verarbeitet werden. Aber das gleiche gilt auch für die Registrierung (HKLM:) und sogar Zertifikate (Cert:). Das sind PSDrive-Provider

Mit Write-Host gibt es einfacher Ausgaben und die Pipeline erlaubt die Verkettung von Befehlen.

Zuletzt fehlen noch IF THEN ELSE,  FOR-Schleifen und die { }-Klammern für Blöcke. Vergessen sie nicht die Möglichkeit mit "#" Kommentare zu addieren und Zeilen mit "`" am Ende zur Lesbarkeit umzubrechen oder mit ";" den Code zu beenden.

Sicher haben Sie bei all diesen Experimenten auch "Fehler" gemacht. Sie sollten $error können und die Anweisungen wie

Set-PSDebug -strict
$ErrorActionPreference = "Continue"

Sie sollten am Ende ihr erstes PS1-Skript erstellt haben.

1

CSV-Datei lesen, Zugriff auf Properties, Filtern

Nun nehmen wie die CSV-Datei und lesen diese mit Import-CSV ein. Eventuell passt der Zeichensatz noch nicht, dass Sie mit Get-Content | convertto-csv arbeiten müssen. Sie werden auch hier sehen, wie Sie mit einer FOR-Schleife dann die einzelnen Datensätze erhalten und auf die Eigenschaften zugreifen.

2

PSSnapins/Module laden (z.B. AD-Verwaltung)

Nun wollen wir diese Daten für die Anlage von Benutzern nutzen. Dazu müssen wir die nackte PowerShell erst mal um die Active Directory Commandlets erweitern.

Solche Module gibt es für viele Windows Komponenten.

3

Benutzer anhand der CSV Datei in eigener OU anlegen

Thematik mehrere DCs und AD-Replikation

Dann lesen wir wieder die CSV-Datei ein und legen den Benutzer an. (New-ADUser). Wer es etwas abwandeln will, kann auch gerne Kontakte anlegen, die später eine Targetadresse bekommen. Das wird natürlich nur einmal erfolgreich sein

Vielleicht ist das ein guter Anfang das Skript um einen PARAM-Block zu erweitern, damit Sie den Pfad zur CSV-Datei und zur OU und dem DC parametrisieren können.

4

Benutzer „finden“ und Fehlende anlegen, bestehende aktualisieren

Die nächste Stufe verbessert das Skript, indem es erst nach den Benutzern sucht. Nur wenn diese nicht da sind, werden sie neu angelegt. Werden sie gefunden, dann wird der Benutzer aktualisiert. Beachten Sie z.B. den Sonderfall, wenn das Objekt schon in einer "fremden" OU vorhanden ist.

5

Entfallene Benutzer löschen (Hashtable)

Nun entfernen wir einen Eintrag in der CSV-Tabelle. Ein guter DirSync sollte das Objekt im Ziel ebenfalle entfernen. Dazu müssen wir aber uns die verarbeiteten Objekte oder die Zielobjekte in einer Hashtable merken und bei der Verarbeitung "abhaken". Die übrig gebliebenen Objekte sind danach zu löschen.

6

Exchange

Wenn die Umgebung einen Exchange Server beinhaltet, können die Objekte nun auch zu Exchange Objekten aufgewertet werden. In dem Abschnitt lernen Sie die Remote PowerShell von Exchange einzubinden, so dass Sie keine "Exchange PowerShell" benötigen. Auch hier ist zu prüfen, ob die Objekte vielleicht schon Exchange aktiviert sind, damit Sie keine Fehler bekommen

7

Protokollierung in Eventlog, Als Transcript oder Send-mailmessage

Nachdem wir unseren ersten einfachen OneWay-DirSync erstellt haben, sollten wir uns für den automatisierten Betrieb auch eine Überwachung überlegen. Das Skript kann Eventlogs schreiben, Mails versenden und seine ganze Aktivität natürlich mittels Start-Transcript protokollieren.

Haben Sie daran gedacht die Logdateien nach einiger Zeit wieder zu löschen, so wie Exchange diese auch entfernt ? Wie können Sie das Skript z.B. mit dem Taskplaner starten?

Kür

Wem es dann noch nicht reicht, kann gerne noch ein paar weitere Übungen auf dieser Basis aufsetzen, z.B.

  • Verteiler pflegen
    Wäre es nicht nett all die gerade angelegten Benutzer in einer Verteilergruppe zusammen zu fassen um sie so als Mailverteiler den Anwender anzubieten ?
  • ADSI: Suche im GC
    Bislang waren alle Übungen auf den Commandlets von Exchange, Lync oder dem Active Directory basierend. Sie können aber auch per ADSI direkt ein Objekte angehen. Der erste Schritt ist hier natürlich erst mal die Suche per ADSI, das Finden eines GC etc.
  • Modularisierung
    Sehr schnell werden Sie vielleicht Routinen entwickeln, die Sie immer wieder verwenden. Dazu bieten sich Module oder andere Ansätze zur Modularisierung an.
  • Einbinden von .Net DLLs
    Ebenso gibt es die ein oder anderen .NET.DLLs, die sie auch direkt aus PowerShell ansprechen können, z.B. Windows Forms für Eingabemasken
  • Automatisierung mit COM
    Auch wenn "COM" immer seltener genutzt wird, so ist es für die Automatisierung von Office-Paketen immer noch ein aktueller Weg. Versuchen Sie doch mal einen Report ihrer Benutzer als Word oder Excel-Datei anzulegen oder Daten einer Excel-Tabelle einzulesen.
  • WMI
    WMI ist der Weg zu den Managementfunktionen von Windows und vielen Diensten. Haben Sie schon mal versucht die Statistiken ihres "DirSync"-Projekts als Performance Counter auch anderen Programmen zur Verfügung zu stellen ?
  • SQL und Datenbanken
    Das importieren von CSV-Dateien ist relativ einfach. Wie wäre ein direkter Zugriff auf SQL ?

Weitere Links