PowerShell Active Directory-Automatisierung

PowerShell ist das wichtigste Werkzeug für Windows-Administratoren zur Automatisierung von Active Directory-Aufgaben. Von der Benutzerbereitstellung über Gruppenverwaltung bis hin zu Compliance-Berichten ermöglicht PowerShell die effiziente Verwaltung selbst großer AD-Umgebungen. Diese Anleitung zeigt praxiserprobte Skripte für den täglichen Einsatz.

Active Directory-Modul einrichten

Installieren und konfigurieren Sie das AD-PowerShell-Modul:

# RSAT-Tools unter Windows Server installieren
Install-WindowsFeature -Name RSAT-AD-PowerShell

# Unter Windows 10/11
Add-WindowsCapability -Online -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0

# Modul importieren und Verbindung prüfen
Import-Module ActiveDirectory
Get-ADDomain
Get-ADForest

Überprüfen Sie die verfügbaren Cmdlets:

Get-Command -Module ActiveDirectory | Measure-Object
Get-Command -Module ActiveDirectory | Where-Object { $_.Name -like "*User*" }

Benutzerbereitstellung automatisieren

Erstellen Sie einzelne Benutzer mit allen erforderlichen Attributen:

New-ADUser -Name "Max Mustermann" `
    -SamAccountName "mmustermann" `
    -UserPrincipalName "mmustermann@contoso.de" `
    -GivenName "Max" `
    -Surname "Mustermann" `
    -Department "IT" `
    -Path "OU=Users,OU=IT,DC=contoso,DC=de" `
    -AccountPassword (ConvertTo-SecureString "InitialP@ss2026!" -AsPlainText -Force) `
    -Enabled $true `
    -ChangePasswordAtLogon $true

Für Massenoperationen verwenden Sie CSV-Import:

Import-Csv -Path "C:\Scripts\neue_benutzer.csv" | ForEach-Object {
    $password = ConvertTo-SecureString $_.Password -AsPlainText -Force
    New-ADUser -Name "$($_.Vorname) $($_.Nachname)" `
        -SamAccountName $_.SamAccountName `
        -UserPrincipalName "$($_.SamAccountName)@contoso.de" `
        -GivenName $_.Vorname `
        -Surname $_.Nachname `
        -Department $_.Abteilung `
        -Path $_.OU `
        -AccountPassword $password `
        -Enabled $true
    Add-ADGroupMember -Identity $_.Gruppe -Members $_.SamAccountName
    Write-Host "Benutzer $($_.SamAccountName) erstellt" -ForegroundColor Green
}

Berichte und Auditing

Finden Sie inaktive Konten und generieren Sie Compliance-Berichte:

# Inaktive Benutzer der letzten 90 Tage
$inaktiv = Get-ADUser -Filter * -Properties LastLogonDate |
    Where-Object { $_.LastLogonDate -lt (Get-Date).AddDays(-90) -and $_.Enabled -eq $true } |
    Select-Object Name, SamAccountName, LastLogonDate, Enabled
$inaktiv | Export-Csv -Path "C:\Reports\inaktive_benutzer.csv" -NoTypeInformation

# Bald ablaufende Passwörter
$ablaufend = Get-ADUser -Filter * -Properties msDS-UserPasswordExpiryTimeComputed |
    Select-Object Name, SamAccountName,
        @{N="Ablaufdatum";E={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}} |
    Where-Object { $_.Ablaufdatum -lt (Get-Date).AddDays(14) }
$ablaufend | Export-Csv -Path "C:\Reports\ablaufende_passwoerter.csv" -NoTypeInformation

Erstellen Sie eine Übersicht der Gruppenmitgliedschaften:

Get-ADGroup -Filter * -SearchBase "OU=Gruppen,DC=contoso,DC=de" | ForEach-Object {
    $mitglieder = Get-ADGroupMember -Identity $_.Name | Select-Object -ExpandProperty Name
    [PSCustomObject]@{
        Gruppe = $_.Name
        Anzahl = $mitglieder.Count
        Mitglieder = $mitglieder -join "; "
    }
} | Export-Csv -Path "C:\Reports\gruppenbericht.csv" -NoTypeInformation

Geplante Automatisierung

Richten Sie wiederkehrende Aufgaben mit dem Task Scheduler ein:

$action = New-ScheduledTaskAction -Execute "PowerShell.exe" `
    -Argument "-NoProfile -ExecutionPolicy Bypass -File C:\Scripts\AD-Bereinigung.ps1"
$trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Monday -At 6am
$settings = New-ScheduledTaskSettingsSet -RunOnlyIfNetworkAvailable

Register-ScheduledTask -TaskName "AD Weekly Cleanup" `
    -Action $action -Trigger $trigger -Settings $settings `
    -User "CONTOSO\svc_automation" `
    -Description "Wöchentliche AD-Bereinigung und Berichterstellung"

Kombinieren Sie die obigen Skripte in einem umfassenden Bereinigungsskript, das inaktive Konten deaktiviert, Berichte generiert und Benachrichtigungen per E-Mail versendet. Testen Sie alle Skripte gründlich in einer Testumgebung, bevor Sie sie in der Produktion einsetzen.