Managing Active Directory (AD) with PowerShell enables efficient automation of administrative tasks such as user and group management, managing computer accounts, and organizational units. PowerShell reduces errors, increases productivity, and provides useful reporting capabilities.
The AD module is available on domain controllers and can be installed via RSAT.
Password reset of all users within an OU
Get-ADUser -Filter * -SearchBase "OU=XYZ,OU=USER,DC=CONTOSO,DC=LOCAL" | ForEach-Object {Set-ADUser -Identity $_ -PasswordNeverExpires $false -ChangePasswordAtLogon $true}Export Bitlocker Key from AD as CSV
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 $csvPathCustomize display name for multiple users within an OU
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)"
}
}List unused computer objects in an OU
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."
}Find users with disabled accounts
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."
}View last logon date of all users in an OU
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."
}Export a user’s group memberships
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."
}
