torsten.s
Goto Top

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

Content-Key: 338098

Url: https://administrator.de/contentid/338098

Ausgedruckt am: 19.03.2024 um 07:03 Uhr

Mitglied: Pedant
Pedant 17.05.2017 um 18:48:38 Uhr
Goto Top
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.
Zitat von @Biber:
net user myusername /domain|find "Kennwort läuft ab"   
> (Output:)Kennwort läuft ab                   7/6/2006 7:25 PM
Quelle: Windowspasswort Gültigkeitesdauer herausfinden

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
Mitglied: emeriks
emeriks 17.05.2017 um 20:00:02 Uhr
Goto Top
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.

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"">&nbsp;&nbsp;&nbsp;" & _  
                                       "<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>&nbsp;</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>&nbsp;</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"">&nbsp;&nbsp;&nbsp;" & _  
                                         "      <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
Mitglied: DerWoWusste
DerWoWusste 18.05.2017 um 09:11:17 Uhr
Goto Top
Moin.

Nebenbei: Win10 bring ein Popup, wie alle vorigen Windowsversionen auch. Dies wird nicht sonderlich lange eingeblendet und unaufmerksame Nutzer übersehen es. Default sind 14 Tage vor Ablauf kommt täglich das Popup.