- 1 Section
- 10 Lessons
- unbegrenzt
- PowerShell – Grundlagen bis Automation10
- 1.1Was ist PowerShell? Versionen und ISE vs. VS Code
- 1.2Cmdlets: Verben, Substantive, Get-Help
- 1.3Variablen, Datentypen und Pipeline
- 1.4Kontrollstrukturen: if, switch, for, foreach, while
- 1.5Funktionen und Module
- 1.6Dateisystem und Prozesse verwalten
- 1.7Active Directory mit PowerShell verwalten
- 1.8Netzwerkbefehle: Test-NetConnection, Resolve-DnsName
- 1.9Skripte planen: Task Scheduler
- 1.10Praxisprojekt: AD-Onboarding-Skript
Active Directory mit PowerShell verwalten
Wenn du als FISI in einer Windows-Domäne arbeitest, ist Active Directory (kurz: AD) das wichtigste System überhaupt. Hier sind alle Benutzer, Gruppen, Computer und Berechtigungen zentral verwaltet. Mit der grafischen Konsole ADUC kannst du klicken bis du graue Haare bekommst – oder PowerShell verwenden. Was per Klick 5 Minuten dauert, ist mit einer PowerShell-Zeile in 2 Sekunden erledigt.
Für 100 neue Auszubildende anlegen, alle Postfächer einer Abteilung deaktivieren, Reports über Logins – alles geht. Diese Lektion ist die wahrscheinlich praktischste des Kurses, weil sie direkt FISI-Alltag abbildet. Voraussetzung: das ActiveDirectory-Modul aus L5, das auf einem Domain Controller schon vorinstalliert ist.
1) AD-Modul laden
Bevor irgendetwas geht: das Modul muss verfügbar sein:
Auf einem normalen Client-PC ist das Modul nicht dabei. Du brauchst die RSAT (Remote Server Administration Tools): in Windows 10/11 als „optional feature" installieren oder via Add-WindowsCapability -Online -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0. Auf einem Windows Server mit AD-Rolle ist alles schon da.
2) Die AD-Struktur verstehen
Bevor wir an Cmdlets gehen, kurze Auffrischung der AD-Konzepte (mehr in K28). AD ist hierarchisch aufgebaut wie ein Dateibaum:
3) Distinguished Names (DN) verstehen
AD-Objekte haben einen eindeutigen Distinguished Name (DN). Den brauchst du oft als Parameter:
CN = Common Name (das konkrete Objekt). OU = Organizational Unit. DC = Domain Component (DNS-Komponente). In Skripten brauchst du DNs meist als SearchBase oder für -Path-Parameter beim Anlegen.4) AD-Cmdlets nach Verb-Substantiv-Schema
Wie in L2 gelernt: AD-Cmdlets folgen dem Verb-Substantiv-Schema. Das macht sie erratbar:
Get-Command -Module ActiveDirectory listet ALLE AD-Cmdlets. Mit -Noun ADUser nur User-bezogene. Für detaillierte Doku: Get-Help New-ADUser -Examples.5) User abfragen (Get-ADUser)
Das Brot-und-Butter-Cmdlet. Zwei Aufruf-Stile:
Wichtig: -Filter funktioniert anders als Where-Object! Der Filter wird zum Domain Controller geschickt und dort ausgeführt (effizient bei vielen Usern). Where-Object holt erst alle und filtert lokal (langsam). Bei großen ADs immer -Filter nutzen. Die Syntax in -Filter ist auch leicht anders – ohne $_ und mit Strings in einfachen Anführungszeichen.
6) User anlegen (New-ADUser)
Der Cmdlet mit den meisten Parametern. Hier ein realistisches Beispiel:
Erklärung der wichtigsten Parameter: SamAccountName ist der Login-Name (vor dem @, max. 20 Zeichen), UserPrincipalName der moderne Login mit Domain, Path bestimmt in welcher OU der User landet (als DN). AccountPassword braucht einen SecureString – nie plain text! ChangePasswordAtLogon erzwingt Passwort-Wechsel beim ersten Login. Enabled $true aktiviert das Konto sofort. Der Backtick ` erlaubt Zeilenumbruch innerhalb eines Befehls – eleganter geht das mit Splatting (gleich).
7) Splatting – elegant viele Parameter übergeben
Bei New-ADUser mit 15 Parametern wird der Backtick-Stil unleserlich. Eleganter: Splatting. Du baust eine Hashtable und übergibst sie mit @variablename:
Das @params (mit @, nicht $) „packt die Hashtable aus" und übergibt jeden Eintrag als benannten Parameter. Viel lesbarer als 12 Zeilen mit Backticks. Splatting ist der Profi-Stil für komplexe Cmdlet-Aufrufe – nicht nur bei AD, sondern überall. Vorteile: man kann die Hashtable einfach manipulieren, Werte in Schleifen ändern, je nach Kontext andere Parameter setzen.
8) User ändern und löschen
Best Practice bei Austritt: NIE direkt löschen! Stattdessen Disable-ADAccount (Konto sperren), dann in eine OU „Disabled" verschieben, eventuelle Mailbox/Daten archivieren, und nach 30/60/90 Tagen Aufbewahrungsfrist erst löschen. Das ist auch DSGVO-konform – Daten dürfen nicht endlos aufbewahrt werden, aber direktes Löschen kann zu Datenverlust bei laufenden Prozessen führen.
9) Gruppen verwalten
Group-Scope verstehen: Global für interne User-Gruppen, DomainLocal für Berechtigungs-Zuweisungen auf Ressourcen, Universal für Multi-Domain-Setups. Mehr in K28. Faustregel „AGDLP": Accounts → Global Groups → Domain Local Groups → Permissions.
10) Bulk-Operationen: 100 User auf einmal
Genau für sowas wurde PowerShell gebaut. Die klassische Aufgabe: aus einer CSV-Liste viele User anlegen. Erstmal die CSV vorbereiten:
Das Skript zum Anlegen:
Das ist DAS Skript das in deinem Werkzeugkasten gehört. Aus 5 Minuten manueller Arbeit pro User werden 5 Sekunden Skript-Laufzeit. Bei 50 neuen Azubis spart das ein paar Stunden – plus: jeder User wird identisch konfiguriert, keine vergessenen Felder, kein Tippfehler im Department. Das ist Onboarding-Automation pur. Mehr davon im Praxisprojekt (L10).
11) Reports erstellen
Eine andere häufige Aufgabe: Auswertungen für Audit, Compliance, Manager:
Solche Skripte gehören in den Task Scheduler (L9) und laufen z.B. wöchentlich. Output per Mail an IT-Leitung oder als HTML in eine Sharepoint-Liste. Mit Ergebnissen im JSON-Format kann auch ein CI/CD-Tool wie Power BI oder Grafana Dashboards bauen.
12) Sicherheits-Hinweise
AD-Operationen sind mächtig und potenziell zerstörerisch. Halt dich an diese Regeln:
- Immer -WhatIf zuerst bei Set/Remove/Move-Operationen, besonders mit Filtern.
Get-ADUser -Filter * | Remove-ADUser -WhatIfzeigt was passieren würde – ohne tatsächlich zu löschen. - Niemals Passwörter im Klartext im Skript. Aus CSV ist auch nicht ideal – besser SecureString-Datei oder PowerShell-Vault. Mehr zu sicherer Passwort-Handhabung in K11 Secure Coding.
- Least-Privilege-Account verwenden. Nicht mit Domain-Admin-Rechten arbeiten – delegierter Account mit nur den nötigen Rechten. Siehe K10.
- Logging einbauen bei kritischen Skripten. Wer hat wann was geändert? Mit Datei-IO aus L6 in eine Logdatei schreiben.
- Backup vorm Massen-Skript:
Get-ADUser -Filter * -Properties * | Export-Clixml backup.xml– damit könntest du im Notfall vieles wiederherstellen. - Test in einem Test-AD bevor du auf Produktion losgehst. Microsoft hat dafür kostenlose Eval-Versionen von Windows Server.
Zusammenfassung
AD-Modul laden: Import-Module ActiveDirectory. Struktur: Domäne → OUs → User/Groups. DN: spezifisch nach allgemein, CN=...,OU=...,DC=...,DC=.... Get-ADUser: -Identity für einen, -Filter für viele (LDAP-effizient!), -Properties für Details. -SearchBase für Teilbaum. New-ADUser: viele Parameter, SecureString für Passwort, -Path = Ziel-OU. Splatting mit Hashtable + @params für lesbaren Code. Set-/Disable-/Remove-ADUser: bei Austritt erst deaktivieren + verschieben, nicht direkt löschen (DSGVO!). Gruppen: Add-ADGroupMember, Get-ADGroupMember -Recursive. Bulk-Aktionen: CSV importieren + foreach + Splatting – das ist DER Use-Case für PowerShell-Admin. Reports: Group-Object, Export-Csv. Sicherheit: -WhatIf, kein Plaintext-Passwort, Least-Privilege, Logging, Test-AD.
