PowerShell Active Directory Benutzer-Informationen Script
Überblick
Dieses PowerShell-Script sammelt umfassende Informationen über einen Active Directory-Benutzer, einschließlich Anmeldedaten von allen Domain-Controllern im Netzwerk. Es präsentiert die Daten in einem strukturierten Format als PowerShell-Objekt.
Das komplette Script
$u=Read-Host "Gib den Benutzernamen ein"; $dcs=Get-ADDomainController -Filter *; $logons=$dcs | % {Get-ADUser $u -Server $_.HostName -Properties lastLogon}; $user=Get-ADUser $u -Properties DisplayName,LastLogonDate,PasswordLastSet,whenCreated,Enabled,PasswordNeverExpires,msDS-UserPasswordExpiryTimeComputed; $lastLogon=[DateTime]::FromFileTime(($logons | Sort-Object lastLogon -desc | Select-Object -First 1).lastLogon); $pwdExpiry=$user.'msDS-UserPasswordExpiryTimeComputed'; if ($pwdExpiry -is [Int64] -and $pwdExpiry -gt 0 -and $pwdExpiry -lt [DateTime]::MaxValue.ToFileTimeUtc()) { $pwdExpiryDate=[datetime]::FromFileTime($pwdExpiry) } else { $pwdExpiryDate="N/A" }; [PSCustomObject]@{Benutzer=$user.SamAccountName;Name=$user.DisplayName;LetzterLogon=$lastLogon;PasswortGeaendert=$user.PasswordLastSet;KontoErstellt=$user.whenCreated;Aktiv=$user.Enabled;PasswortLaeuftAb=$pwdExpiryDate}
Schritt-für-Schritt Erklärung
1. Benutzereingabe
$u=Read-Host "Gib den Benutzernamen ein"
$u
2. Domain-Controller ermitteln
$dcs=Get-ADDomainController -Filter *
3. Anmeldedaten von allen Domain-Controllern abrufen
$logons=$dcs | % {Get-ADUser $u -Server $_.HostName -Properties lastLogon}
%
ist Alias für ForEach-Object
)
- Fragt die lastLogon
-Eigenschaft des Benutzers von jedem DC ab
- Notwendig, da lastLogon
nicht automatisch zwischen DCs repliziert wird
4. Allgemeine Benutzerinformationen abrufen
$user=Get-ADUser $u -Properties DisplayName,LastLogonDate,PasswordLastSet,whenCreated,Enabled,PasswordNeverExpires,msDS-UserPasswordExpiryTimeComputed
DisplayName
: Vollständiger Name
- LastLogonDate
: Letztes Anmeldedatum (repliziert)
- PasswordLastSet
: Datum der letzten Passwort-Änderung
- whenCreated
: Konto-Erstellungsdatum
- Enabled
: Konto-Status (aktiv/deaktiviert)
- PasswordNeverExpires
: Passwort-Ablauf-Status
- msDS-UserPasswordExpiryTimeComputed
: Berechnetes Passwort-Ablaufdatum
5. Genauesten Anmeldezeitpunkt ermitteln
$lastLogon=[DateTime]::FromFileTime(($logons | Sort-Object lastLogon -desc | Select-Object -First 1).lastLogon)
lastLogon
-Werte absteigend
- Nimmt den neuesten Wert (erste Stelle nach Sortierung)
- Konvertiert von Windows-FileTime zu lesbarem DateTime-Format
6. Passwort-Ablaufdatum verarbeiten
$pwdExpiry=$user.'msDS-UserPasswordExpiryTimeComputed'
if ($pwdExpiry -is [Int64] -and $pwdExpiry -gt 0 -and $pwdExpiry -lt [DateTime]::MaxValue.ToFileTimeUtc()) {
$pwdExpiryDate=[datetime]::FromFileTime($pwdExpiry)
} else {
$pwdExpiryDate="N/A"
}
7. Strukturierte Ausgabe erstellen
[PSCustomObject]@{
Benutzer=$user.SamAccountName
Name=$user.DisplayName
LetzterLogon=$lastLogon
PasswortGeaendert=$user.PasswordLastSet
KontoErstellt=$user.whenCreated
Aktiv=$user.Enabled
PasswortLaeuftAb=$pwdExpiryDate
}
Ausgabeformat
Das Script gibt ein Objekt mit folgenden Eigenschaften zurück:
Eigenschaft | Beschreibung |
---|---|
Benutzer | SAM-Account-Name des Benutzers |
Name | Vollständiger Anzeigename |
LetzterLogon | Genauester letzter Anmeldezeitpunkt |
PasswortGeaendert | Datum der letzten Passwort-Änderung |
KontoErstellt | Erstellungsdatum des Kontos |
Aktiv | Konto-Status (True/False) |
PasswortLaeuftAb | Passwort-Ablaufdatum oder "N/A" |
Voraussetzungen
- PowerShell mit Active Directory-Modul
- Domain-Mitgliedschaft des ausführenden Computers
- Zugriff auf alle Domain-Controller der Domäne
- Keine besonderen Administratorrechte erforderlich
Anwendungszweck
Dieses Script ist ideal für: - Schnelle Benutzerkonten-Audits - Troubleshooting von Anmeldeproblemen - Überprüfung von Passwort-Richtlinien - Compliance-Berichte und Sicherheitsüberprüfungen