Windows 2008 R2 Domäne, Passwort läuft ab: Erinnerung im Windows 10 Info-Center?
Hallo,
wir betreiben eine Windows 2008 R2 Domäne und haben per GPO eine Passwortlaufzeit von 90 Tagen eingestellt. Ist es unter Windows 10 möglich den Benutzer rechtzeitig vor Ablauf des Passworts
im Info-Center zu informieren? Aktuell passiert dies lt. Aussage unserer Benutzer erst wenn das Passwort abgelaufen ist und dieses muss dann sofort geändert werden.
Viele Grüße,
Torsten
wir betreiben eine Windows 2008 R2 Domäne und haben per GPO eine Passwortlaufzeit von 90 Tagen eingestellt. Ist es unter Windows 10 möglich den Benutzer rechtzeitig vor Ablauf des Passworts
im Info-Center zu informieren? Aktuell passiert dies lt. Aussage unserer Benutzer erst wenn das Passwort abgelaufen ist und dieses muss dann sofort geändert werden.
Viele Grüße,
Torsten
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 338098
Url: https://administrator.de/forum/windows-2008-r2-domaene-passwort-laeuft-ab-erinnerung-im-windows-10-info-center-338098.html
Ausgedruckt am: 21.04.2025 um 21:04 Uhr
3 Kommentare
Neuester Kommentar
Hallo thorsten.s,
das ist nicht mein Thema, ich kann Dir daher nur eine gefummelte Lösung vorschlagen:
1. Der Windows10-Client schaut beim Logon selbst nach wielange sein Kennwort noch gültig ist.
2. Das ausgegebene Datum auswerten und mit "heute" vergleichen.
3. Je nach dem wie groß der Datumsabstand ist, irgendein Popup ausgeben oder nicht.
Bei 1.-3. kann ich gerne behilflich sein.
Wenn es mit InfoCenter sein muss und rein serverseitig funktionieren soll, dann sind andere gefordert.
Gruß Frank
das ist nicht mein Thema, ich kann Dir daher nur eine gefummelte Lösung vorschlagen:
1. Der Windows10-Client schaut beim Logon selbst nach wielange sein Kennwort noch gültig ist.
Zitat von @Biber:
Quelle: Windowspasswort Gültigkeitesdauer herausfindennet user myusername /domain|find "Kennwort läuft ab"
> (Output:)Kennwort läuft ab 7/6/2006 7:25 PM
2. Das ausgegebene Datum auswerten und mit "heute" vergleichen.
3. Je nach dem wie groß der Datumsabstand ist, irgendein Popup ausgeben oder nicht.
Bei 1.-3. kann ich gerne behilflich sein.
Wenn es mit InfoCenter sein muss und rein serverseitig funktionieren soll, dann sind andere gefordert.
Gruß Frank
Hi,
Du kannst es ja mit einem meiner alten VBScripte versuchen. Dieses einfach als Loginscript laufen lassen.
Du musst nur "MinDaysLeft" anpassen.
Und im Pfad parallel zum Script 2 Bilder hinterlegen. "image1.png" und "image2.png" - Abmessungen, mit denen ich gearbeitet habe, stehen im Code.
Oder Bilder wie Du willst und dann die Zeilen "Dim Image1 ..." und "Dim Image2 ..." entsprechend anpassen.
Oder die HTML-Seite komplett überarbeiten.
Falls Du es nutzt dann würde mich interessieren
a) ob es unter Win10 funktioniert (habe ich dort noch nicht getestet)
b) wie Du es ggf. umgesetzt hast
E.
Du kannst es ja mit einem meiner alten VBScripte versuchen. Dieses einfach als Loginscript laufen lassen.
Du musst nur "MinDaysLeft" anpassen.
Und im Pfad parallel zum Script 2 Bilder hinterlegen. "image1.png" und "image2.png" - Abmessungen, mit denen ich gearbeitet habe, stehen im Code.
Oder Bilder wie Du willst und dann die Zeilen "Dim Image1 ..." und "Dim Image2 ..." entsprechend anpassen.
Oder die HTML-Seite komplett überarbeiten.
Falls Du es nutzt dann würde mich interessieren
a) ob es unter Win10 funktioniert (habe ich dort noch nicht getestet)
b) wie Du es ggf. umgesetzt hast
E.
On Error Resume Next
Dim MinDaysLeft : MinDaysLeft = 15
Dim Image1 : Image1 = Replace(WScript.ScriptFullName, WScript.ScriptName, "image1.png") 'Bsp.: 58x498
Dim Image2 : Image2 = Replace(WScript.ScriptFullName, WScript.ScriptName, "image2.png") 'Bsp.: 88x88
Dim DaysLeft : DaysLeft = DateDiff("d", Now, GetCurrentUserPasswordExpirationDate)
If DaysLeft < MinDaysLeft Then
Call IEChangePwd( DaysLeft )
End If
WScript.Quit
'------------------------------------------------------------------------------------------------------------------
Sub IEChangePwd(DaysLeft)
On Error Resume Next
Dim Answer : Answer = 0
Dim oIE : Set oIE = CreateObject("InternetExplorer.Application")
With oIE
.Navigate "about:blank"
.Document.title = "Passwort ändern"
.ToolBar = False
.Resizable = False
.StatusBar = False
.FullScreen = True
.Document.body.style.overflow = "auto"
.Visible = True
End With
Dim TimeOut : TimeOut = 0
Do While oIE.Busy
WScript.Sleep 200
TimeOut = TimeOut + 1
If TimeOut > 75 Then '=15 Sekunden
'Hier liegt irgendein Problem vor
'Um den Loginprozess nicht zu verzögern, brechen wir jetzt ab
oIE.Quit
Set oIE = Nothing
Exit Sub
End If
Loop
oIE.Document.body.outerHTML = "<body bgcolor=""lightgray""><font face=Tahoma>" & _
"<table style=""margin:0"" height=""100%"" width=""100%"" cellpadding=0 cellspacing=0 hspace=0>" & _
" <tr>" & _
" <td width=30 valign=""top""><img height=300 src='" & Image1 & "'></td>" & _
" <td>" & _
" <table style=""margin:0"" height=""100%"" width=""100%"" cellpadding=0 cellspacing=0 hspace=0>" & _
" <tr height=""*""><td id=""main"" align=""center"" valign=""middle""></td></tr>" & _
" <tr height=46><td align=""right"" width=150><img src='" & Image2 & "'></td></tr>" & _
" <tr height=15><td align=""left"">2017, mrxTools, emeriks</td></tr>" & _
" </table>" & _
" </td>" & _
" </tr>" & _
"</table>" & _
"</font></body>"
oIE.Document.all.Main.innerHTML = "<font size=6 color=#0068B2>Ihr Passwort wird in " & DaysLeft & " Tagen ablaufen.<br><br></font>" & _
"<font size=6 color=black>Möchten Sie es jetzt ändern?<br><br></font>" & _
"<input type=""hidden"" id=""Answer"" name=""Answer"" value=""0"">" & _
"<input type=""submit"" id=""ja"" value="" Ja "" onclick=""VBScript:Answer.value=1""> " & _
"<input type=""submit"" id=""Nein"" value="" Nein "" onclick=""VBScript:Answer.value=2"">"
oIE.Document.all.Ja.focus
Do
Answer = -1
Answer = oIE.Document.all.Answer.value
Select Case Answer
Case -1
'Fehler. z.B. weil der IE mit Alt-F4 geschlossen wurde
oIE.Quit
Set oIE = Nothing
Exit Sub
Case 1
'Ja
Exit Do
Case 2
'Nein
oIE.Quit
Set oIE = Nothing
Exit Sub
End Select
WScript.Sleep 200
Loop
oIE.Document.all.Main.innerHTML = " <table height=""100%"" width=""100%"" cellpadding=""0"" cellspacing=""0"" hspace=""0"">" & _
" <tr height=""100""><td align=""center"">" & _
" <font size=6 color=black>Passwort ändern</font>" & _
" </td></tr>" & _
" <tr height=""*"">" & _
" <td id=""main2"" align=""center"" valign=""middle""></td>" & _
" </tr>" & _
" </table>"
Dim OldPassword : OldPassword = ""
Dim NewPassword : NewPassword = ""
Dim ConfirmPassword : ConfirmPassword = ""
Dim ErrMsg : ErrMsg = ""
Do
oIE.Document.all.Main2.innerHTML = "<table cellspacing=5>" & _
" <tr nowrap>" & _
" <td>Benutzer:</td>" & _
" <td colspan=2>" & CreateObject("Wscript.Network").UserDomain & "\" & CreateObject("Wscript.Network").UserName & "</td>" & _
" </tr>" & _
" <tr nowrap>" & _
" <td>Altes Passwort:</td>" & _
" <td><input type=""password"" size=20 id=""OldPassword"" value=""" & OldPassword & """></td>" & _
" <td rowspan=4 width=120></td>" & _
" </tr>" & _
" <tr nowrap>" & _
" <td colspan=3> </td>" & _
" </tr>" & _
" <tr nowrap>" & _
" <td>Neues Passwort:</td>" & _
" <td><input type=""password"" size=""20"" id=""NewPassword"" value=""" & NewPassword & """></td>" & _
" </tr>" & _
" <tr nowrap>" & _
" <td>Wiederholung:</td>" & _
" <td><input type=""password"" size=""20"" id=""ConfirmPassword"" value=""" & ConfirmPassword & """></td>" & _
" </tr>" & _
" <tr nowrap>" & _
" <td colspan=3> </td>" & _
" </tr>" & _
" <tr nowrap>" & _
" <td colspan=3 align=""center"">" & _
" <input type=""hidden"" id=""Answer"" name=""Answer"" value=0>" & _
" <input type=""submit"" value="" Ändern "" onclick=""VBScript:Answer.value=1""> " & _
" <input type=""submit"" value="" Abbrechen "" onclick=""VBScript:Answer.value=2"">" & _
" </td>" & _
" </tr>" & _
"</table><br><br>"
oIE.Document.all.OldPassword.focus
Do
Answer = -1
Answer = oIE.Document.all.Answer.value
Select Case Answer
Case -1
'Fehler. z.B. weil der IE mit Alt-F4 geschlossen wurde
oIE.Quit
Set oIE = Nothing
Exit Sub
Case 1
'Ändern
Exit Do
Case 2
'Abbrechen
oIE.Quit
Set oIE = Nothing
Exit Sub
End Select
WScript.Sleep 200
Loop
OldPw = vbNewLine
NewPw = vbNewLine
ConfPw = vbNewLine
OldPw = oIE.Document.all.OldPassword.value
NewPw = oIE.Document.all.NewPassword.value
ConfPw = oIE.Document.all.ConfirmPassword.value
If (OldPw = vbNewLine) Or (NewPw = vbNewLine) Or (ConfPw = vbNewLine) Then
'Fehler. z.B. weil der IE mit Alt-F4 geschlossen wurde
oIE.Quit
Set oIE = Nothing
Exit Sub
Else
OldPassword = OldPw
NewPassword = NewPw
ConfirmPassword = ConfPw
End If
If NewPw = "" And ConfPw = "" Then
'2x leeres Passwort
oIE.Document.all.Main2.innerHTML = "<font size=6 color=red>Ein leeres Passwort ist nicht erlaubt.<br></font><br><br>" & _
"<input type=""hidden"" id=""Answer"" name=""Answer"" value=""0"">" & _
"<input type=""submit"" id=""OK"" value="" OK "" onclick=""VBScript:Answer.value=1"">"
oIE.Document.all.OK.focus
Do
Answer = -1
Answer = oIE.Document.all.Answer.value
Select Case Answer
Case -1
'Fehler. z.B. weil der IE mit Alt-F4 geschlossen wurde
oIE.Quit
Set oIE = Nothing
Exit Sub
Case 1
'OK
Exit Do
End Select
WScript.Sleep 200
Loop
ElseIf NewPw <> ConfPw Then
'Wiederholung stimmt nicht überein
oIE.Document.all.Main2.innerHTML = "<font size=6 color=red>Das Passwort wurde falsch wiederholt.<br></font><br><br>" & _
"<input type=""hidden"" id=""Answer"" name=""Answer"" value=""0"">" & _
"<input type=""submit"" id=""OK"" value="" OK "" onclick=""VBScript:Answer.value=1"">"
oIE.Document.all.OK.focus
Do
Answer = -1
Answer = oIE.Document.all.Answer.value
Select Case Answer
Case -1
'Fehler. z.B. weil der IE mit Alt-F4 geschlossen wurde
oIE.Quit
Set oIE = Nothing
Exit Sub
Case 1
'OK
Exit Do
End Select
WScript.Sleep 200
Loop
ElseIf NewPw = OldPw Then
'das neue Passwort ist gleich dem alten
oIE.Document.all.Main2.innerHTML = "<font size=6 color=red>Das neue Passwort muss verschieden vom alten Passwort sein.<br></font><br><br>" & _
"<input type=""hidden"" id=""Answer"" name=""Answer"" value=""0"">" & _
"<input type=""submit"" id=""OK"" value="" OK "" onclick=""VBScript:Answer.value=1"">"
oIE.Document.all.OK.focus
Do
Answer = -1
Answer = oIE.Document.all.Answer.value
Select Case Answer
Case -1
'Fehler. z.B. weil der IE mit Alt-F4 geschlossen wurde
oIE.Quit
Set oIE = Nothing
Exit Sub
Case 1
'OK
Exit Do
End Select
WScript.Sleep 200
Loop
Else
'Eingabe OK --> Pasword ändern
Set oUserX = GetCurrentUserObject
Err.Clear
oUserX.ChangePassword OldPw, NewPw
ErrMsg = Err.Number
If ErrMsg = 0 Then
oIE.Document.all.Main2.innerHTML = "<font size=6 color=black>Das Passwort wurde geändert.<br></font><br><br>" & _
"<input type=""hidden"" id=""Answer"" name=""Answer"" value=""0"">" & _
"<input type=""submit"" id=""OK"" value="" OK "" onclick=""VBScript:Answer.value=1"">"
oIE.Document.all.OK.focus
Do
Answer = -1
Answer = oIE.Document.all.Answer.value
Select Case Answer
Case -1
'Fehler. z.B. weil der IE mit Alt-F4 geschlossen wurde
oIE.Quit
Set oIE = Nothing
Exit Sub
Case 1
'OK
Exit Do
End Select
WScript.Sleep 200
Loop
Exit Do
Else
Select Case ErrMsg
Case Clng("&h8007202F")
'ERROR_DS_CONSTRAINT_VIOLATION
ErrMsg = "Das Passwort wurde gerade erst geändert."
Case 2245
'NERR_PasswordTooShort
ErrMsg = "Das neue Passwort entspricht nicht den Anforderungen. (zu kurz oder nicht komplex genug)"
Case 5
'ERROR_ACCESS_DENIED
ErrMsg = "Zugriff verweigert."
Case Else
ErrMsg = "Unbekannter Fehler - " & ErrMsg & " - " & Right("00000000" & Hex(ErrMsg),8)
End Select
oIE.Document.all.Main2.innerHTML = "<font size=6 color=red>Fehler beim Ändern des Passworts.<br><br></font>" & _
"<font size=6 color=black>" & ErrMsg & "<br></font><br><br>" & _
"<input type=""hidden"" id=""Answer"" name=""Answer"" value=""0"">" & _
"<input type=""submit"" id=""OK"" value="" OK "" onclick=""VBScript:Answer.value=1"">"
oIE.Document.all.OK.focus
Do
Answer = -1
Answer = oIE.Document.all.Answer.value
Select Case Answer
Case -1
'Fehler. z.B. weil der IE mit Alt-F4 geschlossen wurde
oIE.Quit
Set oIE = Nothing
Exit Sub
Case 1
'OK
Exit Do
End Select
WScript.Sleep 200
Loop
End If
End If
Loop
oIE.Quit
Set oIE = Nothing
End Sub
'------------------------------------------------------------------------------------------------------------------
Function GetCurrentUserDN
On Error Resume Next
GetCurrentUserDN = CreateObject("ADSystemInfo").UserName
End Function
'------------------------------------------------------------------------------------------------------------------
Function GetCurrentUserObject
On Error Resume Next
Dim oUser : Set oUser = Nothing
Set oUser = GetObject("LDAP://" & Replace(GetCurrentUserDN,"/","\/"))
If oUser Is Nothing Then
With CreateObject("ADODB.Recordset")
.Open "SELECT * FROM 'LDAP://" & GetObject("LDAP://RootDSE").Get("defaultNamingContext") & "' " & _
"WHERE objectCategory='User' and sAMAccountName='" & WScript.CreateObject("Wscript.Network").UserName & "'", _
"Provider=ADsDSOObject"
If Not .EOF Then
Set oUser = GetObject(.Fields.Item(0))
End If
.Close
End With
End If
If oUser Is Nothing Then
With CreateObject("Wscript.Network")
Set oUser = GetObject("WinNT://" & .UserDomain & "/" & .UserName)
End With
End If
Set GetCurrentUserObject = oUser
End Function
'------------------------------------------------------------------------------------------------------------------
Function GetCurrentUserPasswordExpirationDate
On Error Resume Next
Dim oUser : Set oUser = Nothing
Dim TimeShift : TimeShift = 0
Set oUser = GetCurrentUserObject
TimeShift = GetLocalTimeShift
oUser.GetInfoEx Array("msDS-UserPasswordExpiryTimeComputed"), 0
Dim UPETC : Set UPETC = oUser.Get("msDS-UserPasswordExpiryTimeComputed")
UPETC_high = UPETC.HighPart
UPETC_low = UPETC.LowPart
If (UPETC_low < 0) Then
UPETC_high = UPETC_high + 1
End If
Dim ExpirationDate
If (UPETC_high = 0) And (UPETC_low = 0) Then
ExpirationDate = CDate("01.01.1601")
Else
ExpirationDate = CDate("01.01.1601") + (((UPETC_high * 2^32) + UPETC_low)/600000000 - TimeShift)/1440
End If
If Not IsDate(ExpirationDate) Then
ExpirationDate = CDate("01.01.2100")
End If
GetCurrentUserPasswordExpirationDate = ExpirationDate
End Function
'------------------------------------------------------------------------------------------------------------------
Function GetLocalTimeShift
On Error Resume Next
Dim TimeShift, RegTimeShift
RegTimeShift = CreateObject("Wscript.Shell").RegRead("HKLM\System\CurrentControlSet\Control\TimeZoneInformation\ActiveTimeBias")
If IsArray(RegTimeShift) Then
TimeShift = 0
For i = 0 To UBound(RegTimeShift)
TimeShift = timeShift + (RegTimeShift(i) * 256^i)
Next
Else
TimeShift = TimeShiftValue
End If
GetLocalTimeShift = TimeShift
End Function