🛡️ ActiveDirectory-PowerShell-Modul

Der Praxis-Guide für Admins

Mit dem Modul ActiveDirectory in PowerShell steht Administratoren ein mächtiges Werkzeug zur Verfügung, um Active-Directory-Objekte wie Benutzer, Gruppen, Computer, Organisationseinheiten (OUs) und Gruppenrichtlinien schnell, skriptgesteuert und zuverlässig zu verwalten.

Dieser Beitrag gibt Ihnen einen erweiterten Überblick über die wichtigsten Cmdlets, den produktiven Einsatz in der Domäne und bewährte Best Practices.

Voraussetzungen

  • Windows Server mit Active Directory-Rolle oder ein Windows-Client mit den RSAT-Tools.
  • PowerShell-Version ≥ 5.1 (oder Windows PowerShell 7+ mit Import-Module).
  • Import des Moduls (meist automatisch verfügbar auf AD-Servern):
PowerShell
Import-Module ActiveDirectory

🧩 Modulüberblick und Hilfe anzeigen

PowerShell
Get-Module -ListAvailable ActiveDirectory
Get-Command -Module ActiveDirectory
Get-Help Get-ADUser -Detailed  # Beispiel um die Funktionsweise vom Command "Get-ADUser" zu verstehen

👨‍💼 Top 10 Cmdlets für Domänen-Administratoren

1. Benutzer suchen

PowerShell
Get-ADUser -Filter * -SearchBase "OU=Benutzer,DC=testdomain,DC=local"
Get-ADUser -Filter * -SearchBase "OU=Benutzer,DC=testdomain,DC=local" | ft

Die Ausgabe der Benutzer sieht wie nachfolgend aus und kann zur Übersicht noch formatiert und angepasst werden.

PowerShell
DistinguishedName : CN=Nachname\, Vorname,OU=Benutzer, DC=testdomain,DC=local
Enabled           : True
GivenName         : Vorname
Name              : Nachname, Vorname
ObjectClass       : user
ObjectGUID        : eb3867da-5c0b-4633-b19e-e366700d1032
SamAccountName    : Anmeldename
SID               : S-1-5-21-2875105853-2476587791-2145578461-4692
Surname           :
UserPrincipalName : testuser@testdomain.local

1. Benutzer mit bestimmten Attributen finden

PowerShell
Get-ADUser -Filter {Enabled -eq $true -and Department -eq "IT"} -Properties Department

3. Neuen Benutzer erstellen

PowerShell
New-ADUser -Name "Max Mustermann" `
  -GivenName "Max" `
  -Surname "Mustermann" `
  -SamAccountName "mmustermann" `
  -UserPrincipalName "mmustermann@firma.local" `
  -Path "OU=Benutzer,DC=firma,DC=local" `
  -AccountPassword (ConvertTo-SecureString "Passw0rd!" -AsPlainText -Force) `
  -Enabled $true

4. Passwort zurücksetzen

PowerShell
Set-ADAccountPassword -Identity mmustermann -NewPassword (ConvertTo-SecureString "NeuesPass123!" -AsPlainText -Force) -Reset
Unlock-ADAccount -Identity mmustermann

5. Benutzer zu einer Gruppe hinzufügen

PowerShell
Add-ADGroupMember -Identity "IT-Admins" -Members mmustermann

6. Benutzer aus Gruppe entfernen

PowerShell
Remove-ADGroupMember -Identity "IT-Admins" -Members mmustermann -Confirm:$false

7. Gruppenmitglieder anzeigen

PowerShell
Get-ADComputer -Filter * -SearchBase "OU=Clients,DC=firma,DC=local"

8. Computerobjekte finden

PowerShell
Get-ADComputer -Filter * -SearchBase "OU=Clients,DC=firma,DC=local"

9. Letztes Anmeldedatum von Benutzern abfragen

PowerShell
Get-ADUser -Filter * -Properties LastLogonDate | Select Name, LastLogonDate

Nachfolgend zwei Beispiele mit Ausgabe:

PowerShell
Get-ADUser testuser -Properties LastLogonDate | FT -Property Name, LastLogonDate -A

Name    LastLogonDate
----    -------------
testuser  11.03.2025 09:11:49

Get-ADUser testuser -Properties LastLogonDate

DistinguishedName : CN=testuser,OU=Test,OU=Benutzer,OU=domainOU,DC=testdomain,DC=de
Enabled           : True
GivenName         : testuser
LastLogonDate     : 11.03.2025 09:11:49
Name              : testuser  
ObjectClass       : user
ObjectGUID        : adffdd6e-02a3-4651-8606-1a7ad1923cfe
SamAccountName    : testuser
SID               : S-1-5-21-2875105854-2476583791-2145578461-1438
Surname           : test
UserPrincipalName : testuser@testdomain.de

10. Gruppen verschachtelt anzeigen (rekursiv)

PowerShell
Get-ADGroupMember -Identity "Domain Admins" -Recursive

Alternativen – Active Directory Service Interface oder auch adsi

PowerShell
$searcher = New-Object DirectoryServices.DirectorySearcher
$searcher.SearchRoot = [ADSI]"LDAP://RootDSE" # Die root Domain
$searcher.Filter = "(&(objectCategory=User)(samAccountName=USERNAME))" # Userobjecte werden gesucht mit dem bestimmten anmeldenamen
$result = $searcher.FindOne() # FindAll()

Das Ganze kann man auch als simple Funktion aufbauen und so direkt nach dem User suchen.

PowerShell
function Get-ADUser {
    param([string]$UserName)
    return (New-Object System.DirectoryServices.DirectorySearcher("(&(objectCategory=User)(samAccountName=$UserName))")).FindOne()
}

🧠 Best Practices für den produktiven Einsatz

Um das ActiveDirectory-Modul effizient und sicher zu nutzen, empfehlen sich folgende Vorgehensweisen:

  1. Sichere Passwortverwaltung: Verwende Secure Strings für Passwörter – auch in Skripten.
  2. Effiziente Filterung: Setze den -Filter {} Parameter ein, anstatt Where-Object zu nutzen, um die Performance zu optimieren.
  3. Reporting: Generiere regelmäßige Berichte und exportiere Daten mit Export-Csv:
  4. Testen mit -WhatIf: Führe neue Skripte zunächst mit -WhatIf oder -Confirm:$false aus, um unbeabsichtigte Änderungen zu vermeiden.
  5. Überwachung inaktiver Konten: Analysiere LastLogonDate Werte, um inaktive Benutzerkonten zu identifizieren und zu verwalten.

📚 Weitere Ressourcen

Vertiefende Informationen und aktuelle Entwicklungen findest du in diesen Quellen:

🏁 Fazit

Das ActiveDirectory-Modul in PowerShell ist ein unverzichtbares Tool für die Verwaltung komplexer Domänenumgebungen. Mit den vorgestellten Cmdlets, erweiterten Anwendungsfällen und Best Practices kannst du administrative Aufgaben automatisieren, detaillierte Reports erstellen und schnell auf Veränderungen reagieren. Richtig eingesetzt verbessert es die Effizienz und Sicherheit deiner IT-Infrastruktur erheblich.

Dies ist der Auftakt zu einer fortlaufenden Serie, in der wir noch tiefer in fortgeschrittene Techniken, praxisnahe Skripte und optimierte Abläufe in Windows-Domänenumgebungen eintauchen. Hast du Fragen oder möchtest du deine eigenen Erfahrungen teilen? Dann diskutiere gern in den Kommentaren mit!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert