Die Verwaltung von Active Directory (AD) mit PowerShell ermöglicht eine effiziente Automatisierung administrativer Aufgaben wie Benutzer- und Gruppenverwaltung, das Verwalten von Computerkonten und Organisationseinheiten. PowerShell reduziert Fehler, steigert die Produktivität und bietet nützliche Reporting-Funktionen.
Das AD-Modul ist auf Domänencontrollern verfügbar und über RSAT installierbar.
Passwort Zurücksetzung von allen Usern innerhalb einer OU
Get-ADUser -Filter * -SearchBase "OU=XYZ,OU=USER,DC=CONTOSO,DC=LOCAL" | ForEach-Object {Set-ADUser -Identity $_ -PasswordNeverExpires $false -ChangePasswordAtLogon $true}
Bitlocker Key aus dem AD als CSV exportieren
Import-module ActiveDirectory
$computers = Get-ADComputer -Filter * -SearchBase "OU=Computers,DC=CONTOSO,DC=LOCAL"
$csvPath = "C:\temp\bitlocker-list-ad.csv"
$output = @()
$output += "HostName, RecoveryPassword"
foreach ($computer in $computers) {
$fetch = $(Get-ADObject -Filter {objectclass -eq 'msFVE-RecoveryInformation'} -SearchBase $computer.DistinguishedName -Properties 'msFVE-RecoveryPassword',whencreated | Sort-Object WhenCreated -Descending).'msFVE-RecoveryPassword'
if (-Not $fetch) {
$output += ($computer.Name,"BitLocker not active") -join ","
}
elseif ($fetch.Count -gt 1) {
$output += ($computer.Name, $fetch[0]) -join ","
}
else {
$output += ($computer.Name, $fetch) -join ","
}
}
$output | Out-File -FilePath $csvPath
Anzeigename bei mehreren Benutzern, innerhalb einer OU, anpassen
Import-Module ActiveDirectory
$users = Get-ADUser -Filter * -SearchBase "OU=XYZ,OU=USER,DC=CONTOSO,DC=LOCAL" -Properties GivenName, Surname, DisplayName
foreach ($user in $users)
{ if ($user.GivenName -and $user.Surname)
{
$Vorname = $user.GivenName
$Nachname = $user.Surname
$NeuerAnzeigename = "$Nachname, $Vorname | NEUER ANZEIGENAME"
# Anzeigename aktualisieren
Set-ADUser -Identity $user.SamAccountName -DisplayName $NeuerAnzeigename
}
else
{
Write-Host "Vorname oder Nachname fehlt bei: $($user.SamAccountName)"
}
}
Nicht genutzte Computerobjekte in einer OU auflisten
Variablen definieren
$OU = "OU=Computer,DC=domain,DC=local" # Pfad zur Ziel-OU
$InaktivitätTage = 90 # Anzahl der Inaktivitätstage
$ExportPfad = "C:\InaktiveComputer.csv" # Speicherort der CSV-Datei
Heutiges Datum und Grenzdatum berechnen
$Heute = Get-Date
$GrenzDatum = $Heute.AddDays(-$InaktivitätTage)
Inaktive Computer sammeln
Write-Host "Suche nach inaktiven Computern in der OU: $OU …"
$InaktiveComputer = Get-ADComputer -SearchBase $OU -Filter * -Properties LastLogonDate |
Where-Object { $_.LastLogonDate -lt $GrenzDatum -and $_.LastLogonDate -ne $null } |
Select-Object Name, @{Name="LastLogonDate"; Expression={($_.LastLogonDate).ToString("yyyy-MM-dd")}}
Ergebnisse anzeigen
if ($InaktiveComputer) {
Write-Host "Gefundene inaktive Computer:"
$InaktiveComputer | Format-Table -AutoSize
# Optional: Ergebnisse exportieren
if ($ExportPfad) {
$InaktiveComputer | Export-Csv -Path $ExportPfad -NoTypeInformation -Encoding UTF8
Write-Host "Ergebnisse wurden in $ExportPfad gespeichert."
}
} else {
Write-Host "Keine inaktiven Computer gefunden."
}
Benutzer mit deaktivierten Konten finden
Variablen definieren
$OU = "OU=Users,DC=domain,DC=local" # Pfad zur Ziel-OU
$ExportPfad = "C:\DeaktivierteBenutzer.csv" # Optional: Speicherort der CSV-Datei
Deaktivierte Benutzer finden
Write-Host "Suche nach deaktivierten Benutzerkonten in der OU: $OU …"
$DeaktivierteBenutzer = Get-ADUser -SearchBase $OU -Filter { Enabled -eq $false } -Properties DisplayName, SamAccountName, Enabled |
Select-Object DisplayName, SamAccountName, @{Name="Enabled"; Expression={$_.Enabled}}
Ergebnisse anzeigen
if ($DeaktivierteBenutzer) {
Write-Host "Gefundene deaktivierte Benutzerkonten:"
$DeaktivierteBenutzer | Format-Table -AutoSize
# Optional: Ergebnisse exportieren
if ($ExportPfad) {
$DeaktivierteBenutzer | Export-Csv -Path $ExportPfad -NoTypeInformation -Encoding UTF8
Write-Host "Ergebnisse wurden in $ExportPfad gespeichert."
}
} else {
Write-Host "Keine deaktivierten Benutzerkonten gefunden."
}
Letztes Anmeldedatum aller Benutzer in einer OU anzeigen
Variablen definieren
$OU = "OU=Users,DC=domain,DC=local" # Pfad zur Ziel-OU
$ExportPfad = "C:\BenutzerAnmeldedaten.csv" # Optional: Speicherort der CSV-Datei
Benutzer und deren letztes Anmeldedatum abrufen
Write-Host "Suche nach Benutzern und deren letzten Anmeldedaten in der OU: $OU …"
$BenutzerAnmeldedaten = Get-ADUser -SearchBase $OU -Filter * -Properties DisplayName, SamAccountName, LastLogonDate |
Select-Object DisplayName, SamAccountName, @{Name="LastLogonDate"; Expression={($_.LastLogonDate).ToString("yyyy-MM-dd")}}
Ergebnisse anzeigen
if ($BenutzerAnmeldedaten) {
Write-Host "Gefundene Benutzer mit Anmeldedaten:"
$BenutzerAnmeldedaten | Format-Table -AutoSize
# Optional: Ergebnisse exportieren
if ($ExportPfad) {
$BenutzerAnmeldedaten | Export-Csv -Path $ExportPfad -NoTypeInformation -Encoding UTF8
Write-Host "Ergebnisse wurden in $ExportPfad gespeichert."
}
} else {
Write-Host "Keine Benutzer in der angegebenen OU gefunden."
}
Gruppenmitgliedschaften eines Benutzers exportieren
Variablen definieren
$BenutzerSamAccountName = "username" # SAM-Account-Name des Benutzers
$ExportPfad = "C:\Gruppenmitgliedschaften.csv" # Optional: Speicherort der CSV-Datei
Gruppenmitgliedschaften abrufen
Write-Host "Suche nach Gruppenmitgliedschaften des Benutzers: $BenutzerSamAccountName …"
$Gruppen = Get-ADUser -Identity $BenutzerSamAccountName -Properties MemberOf |
Select-Object -ExpandProperty MemberOf |
ForEach-Object { (Get-ADGroup -Identity $_).Name }
Ergebnisse anzeigen
if ($Gruppen) {
Write-Host "Gefundene Gruppenmitgliedschaften:"
$Gruppen | Format-Table -AutoSize
# Optional: Ergebnisse exportieren
if ($ExportPfad) {
$Gruppen | ForEach-Object { [PSCustomObject]@{GroupName = $_} } | Export-Csv -Path $ExportPfad -NoTypeInformation -Encoding UTF8
Write-Host "Ergebnisse wurden in $ExportPfad gespeichert."
}
} else {
Write-Host "Keine Gruppenmitgliedschaften gefunden oder Benutzer existiert nicht."
}