📁 Powershell

docs/Powershell

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"
- Fordert den Administrator auf, einen Benutzernamen einzugeben - Speichert die Eingabe in der Variable $u

2. Domain-Controller ermitteln

$dcs=Get-ADDomainController -Filter *
- Sammelt alle verfügbaren Domain-Controller in der aktuellen Domäne - Wichtig für die genaue Bestimmung des letzten Anmeldezeitpunkts

3. Anmeldedaten von allen Domain-Controllern abrufen

$logons=$dcs | % {Get-ADUser $u -Server $_.HostName -Properties lastLogon}
- Durchläuft jeden Domain-Controller (% 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
Lädt wichtige Benutzereigenschaften: - 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)
- Sortiert alle 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" 
}
- Prüft, ob ein gültiges Ablaufdatum vorhanden ist - Konvertiert FileTime zu DateTime oder setzt "N/A" bei ungültigen Werten - Behandelt Sonderfälle wie "Passwort läuft nie ab"

7. Strukturierte Ausgabe erstellen

[PSCustomObject]@{
    Benutzer=$user.SamAccountName
    Name=$user.DisplayName
    LetzterLogon=$lastLogon
    PasswortGeaendert=$user.PasswordLastSet
    KontoErstellt=$user.whenCreated
    Aktiv=$user.Enabled
    PasswortLaeuftAb=$pwdExpiryDate
}
Erstellt ein PowerShell-Objekt mit allen gesammelten Informationen in deutscher Sprache.

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