Skip to content

Daniels Tagesmeldungen

Kleine IT-Episoden, der Diabetes & das wahre Leben

  • Startseite
  • About me…
    • Lebenslauf
    • Weiterbildung
  • Diabetes melitus
    • Diabetes melitus – Definition/Typen
    • Diabetes melitus – Podcasts
    • Diabetes Typ-2 – Erläuterung
    • Medikament – Forxiga (Dapagliflozin)
    • Medikament – Eylea (Aflibercept)
    • Medikament – Lucentis (Ranibizumab )
    • Medikament – Metformin
  • Disclaimer
  • Toggle search form

Powershell: Abfrage des AD-User-Passwortalters

Posted on 19. Februar 201919. Februar 2019 By Daniel Lensing Keine Kommentare zu Powershell: Abfrage des AD-User-Passwortalters

Im Rahmen einer Entstörung von AD-Benutzeraccounts benötigte ich die aktuelle Passwort-Daten beim Anruf der Benutzer. Dazu habe ich mir ein kleines Skript geschrieben. Dieses berücksichtigt die folgenden Szenarien:

  • AD-Benutzer gibt es nicht
  • AD-Benutzer ist deaktiviert
  • AD-Benutzer hat ein Ablaufdatum und dieses ist überschritten
  • AD-Benutzer muss sein Kennwort bei der nächsten Anmeldung ändern
  • AD-Benutzer hat keinen Passwort-Ablauf
  • AD-Benutzer ist gesperrt

Wenn dieses alles nicht zutrifft werden folgende 2 Definitionen zur Berechnung des Passwortalters herangezogen:

  • AD-Benutzer nutzt die Default Domain Policy
  • AD-Benutzer nutzt eine Fine-grained Password Policy
Import-Module ActiveDirectory -Force
 
If ($args)
{
$Userlogin = $args[0]
}
 
else
 
{
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
 
$form = New-Object System.Windows.Forms.Form
$form.Text = 'Passwort-Display'
$form.Size = New-Object System.Drawing.Size(300,200)
$form.StartPosition = 'CenterScreen'
 
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Point(75,120)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = 'OK'
$OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $OKButton
$form.Controls.Add($OKButton)
 
$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Point(150,120)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = 'Cancel'
$CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.CancelButton = $CancelButton
$form.Controls.Add($CancelButton)
 
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,20)
$label.Size = New-Object System.Drawing.Size(280,20)
$label.Text = 'Bitte sAMAccountName eingeben:'
$form.Controls.Add($label)
 
$textBox = New-Object System.Windows.Forms.TextBox
$textBox.Location = New-Object System.Drawing.Point(10,40)
$textBox.Size = New-Object System.Drawing.Size(260,20)
$form.Controls.Add($textBox)
 
$form.Topmost = $true
 
$form.Add_Shown({$textBox.Select()})
$result = $form.ShowDialog()
 
if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
    $Userlogin = $textBox.Text
}
 
if ($result -eq [System.Windows.Forms.DialogResult]::Cancel)
{
    exit
}
 
}
 
$Usercheck = Get-Aduser -filter {samaccountname -eq $userlogin}
 
If ($usercheck -eq $NULL)
{
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[System.Windows.Forms.MessageBox]::Show("Der Benutzer existiert nicht.","User " +$Userlogin,0,[System.Windows.Forms.MessageBoxIcon]::Error)
exit
}
 
$employee = Get-AdUser $Userlogin -Properties enabled,PasswordNeverExpires,PasswordLastSet,Displayname,LockedOut,"msDS-UserPasswordExpiryTimeComputed",AccountExpirationDate
 
If ($employee.enabled -like "False")
{
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[System.Windows.Forms.MessageBox]::Show("Benutzer "+$employee.displayname+" ist deaktiviert","User " +$Userlogin,0,[System.Windows.Forms.MessageBoxIcon]::Error)
exit
}
 
If (($employee.AccountExpirationDate) -eq $null)
{
}
else
{
 
$Ablaufdatum = ((get-date) - ($employee.AccountExpirationDate))
$Ablauftage=$Ablaufdatum.days
 
If ($Ablauftage -gt "0")
{
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[System.Windows.Forms.MessageBox]::Show("Benutzer: "+$employee.displayname+"  `n`n"+ "Ablaufdatum des Accounts: "+$employee.AccountExpirationDate,"User " +$Userlogin,0,[System.Windows.Forms.MessageBoxIcon]::Error)
exit
}
 
}
 
 
If ($employee.PasswordLastSet -eq $null)
{
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[System.Windows.Forms.MessageBox]::Show("Benutzer: "+$employee.displayname+"  `n`n"+"Das Passwort des Accounts muss bei der nächsten Anmeldung geändert werden.","User " +$Userlogin,0,[System.Windows.Forms.MessageBoxIcon]::Error)
exit
}
 
If ($employee.passwordneverexpires -like "True")
{
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[System.Windows.Forms.MessageBox]::Show("Benutzer: "+$employee.displayname+"  `n`n"+"Das Passwort des Accounts läuft nicht ab.","User " +$Userlogin,0,[System.Windows.Forms.MessageBoxIcon]::Error)
exit
}
 
If ($employee.LockedOut -like "True")
{
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[System.Windows.Forms.MessageBox]::Show("Benutzer: "+$employee.displayname+"  `n`n"+"Der Account ist gesperrt.","User " +$Userlogin,0,[System.Windows.Forms.MessageBoxIcon]::Error)
exit
}
 
$FGPP=(Get-ADUserResultantPasswordPolicy $Userlogin)
 
If($fgpp.name -eq $null) 
{
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$expireDate=((Get-adUser($Userlogin) -Properties PassWordLastSet).PasswordLastSet + (Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge.Ticks)
$daysleft=($expireDate-(get-date)).Days
 
if($daysleft-le "0")
 
{
$daysnegative =-$daysleft
[System.Windows.Forms.MessageBox]::Show("Benutzer: "+$employee.displayname+"  `n`n"+"Regelwerk: Default Domain Policy `n`n"+"Das Passwort ist seit "+<span style="display: inline !important; float: none; background-color: transparent; color: #2b2b2b; cursor: text; font-family: 'Philosopher',sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">$daysnegative</span>+" Tagen abgelaufen. `n`n"+"Genauer Zeitstempel: "+$expireDate+"","User " +$Userlogin,0,[System.Windows.Forms.MessageBoxIcon]::Warning)
}
 
else{
[System.Windows.Forms.MessageBox]::Show("Benutzer: "+$employee.displayname+"  `n`n"+"Regelwerk: Default Domain Policy `n`n"+"Das Passwort muss in "+$daysleft+" Tagen geändert werden. `n`n"+"Genauer Zeitstempel: "+$expireDate+"","User " +$Userlogin,0,[System.Windows.Forms.MessageBoxIcon]::Information)
}
exit
}
 
else{
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$expireDate=((Get-adUser($Userlogin) -Properties PassWordLastSet).PasswordLastSet + (Get-ADUserResultantPasswordPolicy -Identity $Userlogin).MaxPasswordAge.Ticks)
$daysleft=($expireDate-(get-date)).Days
 
if($daysleft-le "0")
 
{
$daysnegative =-$daysleft
[System.Windows.Forms.MessageBox]::Show("Benutzer: "+$employee.displayname+"  `n`n"+"Regelwerk: "+$fgpp.Name+" `n`n"+"Das Passwort ist seit "+$daysnegative+" Tagen abgelaufen. `n`n"+"Genauer Zeitstempel: "+$expireDate+"","User " +$Userlogin,0,[System.Windows.Forms.MessageBoxIcon]::Warning)
}
 
else{
[System.Windows.Forms.MessageBox]::Show("Benutzer: "+$employee.displayname+"  `n`n"+"Regelwerk: "+$fgpp.Name+" `n`n"+"Das Passwort muss in "+$daysleft+" Tagen geändert werden. `n`n"+"Genauer Zeitstempel: "+$expireDate+"","User " +$Userlogin,0,[System.Windows.Forms.MessageBoxIcon]::Information)
}
exit

Damit die Daten ordnungsgemäß abgefragt werden können, benötigt der Ausführende die Leseberechtigungen auf den Container „Password Setting Objects“ im System-Ordner der Domäne.

Das Skript kann per GUI sowie per Skript gestartet werden.

Powershell

Beitrags-Navigation

Previous Post: Excel – Zellen mit Inhalt zählen
Next Post: Telekom Mobilfunk – 500 MB Datenvolumen im März

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Daniel Lensing

Ich betreibe diesen Blog, bei dem ich meine Erfahrungen aus der IT & dem Berufsalltag sowie dem Wahnsinn des Lebens mit Höhen und Tiefen. Darunter meine „Erlebnisreise“ zum Planeten „Diabetes mellitus Typ-2“.

Translate:

Follow us

Kategorien

  • Client (229)
    • Android (7)
    • Fedora (Linux) (5)
    • iOS (5)
    • Mac OS X (5)
    • Peripherie (5)
    • Ubuntu (Linux) (8)
    • Windows 10 (54)
    • Windows 11 (15)
    • Windows 7 (100)
    • Windows 8 (36)
    • Windows 8.1 (28)
    • Windows Mobile (2)
    • Windows Vista (65)
    • Windows XP (21)
  • Cloud (15)
    • Amazon AWS (1)
    • Microsoft Azure (7)
    • Office 365 (9)
  • Fortbewegung (55)
    • Auto (17)
    • Bahn (17)
    • Beinarbeit (5)
    • Flugzeug (3)
    • Zweirad (14)
  • IT-Nachrichten (37)
  • Leben Beruf und Gesundheit (190)
    • #t2dhero (46)
    • Arbeitszimmer (26)
    • Audio (19)
    • Film / Kino (7)
    • Gedanken (75)
    • Gesundheit (29)
    • Internet (4)
    • Lebensmittel & Essen (21)
    • Lesestoff (18)
    • Sport (10)
    • Veranstaltung (3)
  • Lehren & Lernen (48)
    • Forschung (1)
    • Konferenzen (3)
    • Präsentation (3)
    • Zertifizierung (42)
  • Programme (318)
    • Android-Apps (27)
    • Eigene Tools (11)
    • iOS-Apps (6)
    • Office (85)
    • Patchday+Updates (71)
    • Software (145)
    • Spiele (3)
    • Windows Phone-Apps (2)
  • Programmierung (88)
    • AutoIT (1)
    • KiXtart (1)
    • PHP (3)
    • Power Automate (1)
    • Powershell (57)
    • VB.NET (8)
    • VBA (10)
    • VBS (10)
  • Server (156)
    • Citrix XenServer (2)
    • Exchange Server (26)
    • Lync Server (1)
    • System Center (4)
    • Ubuntu Server (2)
    • Windows Home Server (2)
    • Windows Server (91)
    • Windows Server 2012 (45)
    • Windows Server 2016 (15)
    • Windows Server 2019 (15)
    • Windows Server 2022 (12)
    • Windows Server 2025 (5)
  • Telekommunikation (38)
    • Festnetz (3)
    • Internet (13)
    • Mobilfunk (23)
  • Verkauf & Verlosung (1)
  • Web-Installationen (36)
    • Joomla (4)
    • Mastodon (1)
    • MediaWiki (9)
    • phpMyAdmin (2)
    • Piwik (4)
    • Wordpress (20)
Mastodon

Copyright © 2025 Daniels Tagesmeldungen.

Powered by PressBook WordPress theme