Jump to content
Sign in to follow this  
blob

Auslesen wann ein PW von einem User abläuft/abgelaufen ist

Recommended Posts

Hallo an die Gemeinde,

 

ich stehe gerade aufm Schlauch... ich habe hier ein Tool das mir alle DCs abfragt und mir dann zeigt wann ein User das letzte Mal angemeldet war, das letzte Mal das PAsswort geändert wurde und wann es ablaufen wird.

 

Jetzt will ich mit Boardmitteln gerne einen einzelnen DC abfragen. Aber mit der Console (AD Benutzer und Computer) sehe ich nichts... weiss jemand wie ich an die Info ran komme?

 

Danke im voraus!

Share this post


Link to post

Hi,

 

du musst die acctinfo.dll aus den Account Lockout und Management Tools auf dem entsprechenden Client/Server registrieren. Mittels MMC, auf dem Rechner wo du die dll registriert hast, siehst du dann in den Eigenschaften des Benutzer unter dem Reiter Additional Account Info die nötigen Informationen.

 

Allerdings kannst du damit keinen Report generieren, der dir alle Benutzer des DC's anzeigt.

Share this post


Link to post

Hallo,

 

also: Wann ein Benutzer das letzte Mal sein Passwort verändert hat, steht im Attribut pwdLastSet. Das Format ist leider das ziemlich schlecht lesbare Microsoft Integer8 (100-Nanosekunden-Abschnitte seit 1.1.1600!). Aber hier siehst du, wie man es umrechnen kann:

 

SelfADSI : Microsoft Timestamp / Interval Attribute mit Integer8 Syntax

 

Dann brauchst du noch das maximale Passwort-alter der Domäne, damit du das Ablaufdatum für jeden Benutzer errechnen kannst. Das steht (in der Default Domain Policy - und auch) im Domänenobjekt in der eigenschaft maxPwdAge. Auch dies ist Integer8, negativer Wert der 100 Nanosekunden-Abschnitte....

 

Naja, ein bisschen rumgerechnet, das alles mit einer ADO-Suche auf AD User gekoppelt - und das VB Script hier spuckt Dir Deine Liste bzgl. Passwort-Setzen aus:

 

ldapFilter = "(sAMAccountType=805306368)"     '  <- User-Objekte

Set rootDSE = GetObject("LDAP://rootDSE")
domainDN = rootDSE.Get("defaultNamingContext")

Set objDomain = GetObject("LDAP://" & domainDN)
Set interval = objDomain.maxPwdAge
domainPwAge = LargeIntegerToMinutes(interval)
WScript.Echo "Maximales Passwortalter ist: " & (domainPwAge/1440)  & " Tage"
WScript.Echo

Set ado = CreateObject("ADODB.Connection")
ado.Provider = "ADSDSOObject"
ado.Open "ADSearch" 
Set objectList = ado.Execute("<LDAP://" & domainDN & ">;" & ldapFilter & ";distinguishedName,pwdLastSet;subtree")

While Not objectList.EOF
   pWSetValue = objectList.Fields("pwdLastSet")
   pwLastSet = LargeIntegerToDate(pWSetValue)
   pwNextSet = DateAdd("n", domainPwAge, pwLastSet)

   WScript.Echo objectList.Fields("distinguishedName") & " : " & pwLastSet & " : " & pwNextSet

   objectList.MoveNext
Wend


'____________________ [ LargeIntegerToDate ]
'
'
Function LargeIntegerToDate(value)
'nimmmt einen Microsoft LargeInteger Wert (Integer8) und gibt das entsprechende Datum plus Uhrzeit zurück

   Set sho = CreateObject("Wscript.Shell")
   timeShiftValue = sho.RegRead("HKLM\System\CurrentControlSet\Control\TimeZoneInformation\ActiveTimeBias")
   If IsArray(timeShiftValue) Then
       timeShift = 0
       For i = 0 To UBound(timeShiftValue)
           timeShift = timeShift + (timeShiftValue(i) * 256^i)
       Next
   Else
       timeShift = timeShiftValue
   End If

   i8High = value.HighPart
   i8Low = value.LowPart
   If (i8Low < 0) Then
       i8High = i8High + 1
   End If

   If (i8High = 0) And (i8Low = 0) Then
       LargeIntegerToDate = #1/1/1601#
   Else
       LargeIntegerToDate = #1/1/1601# + (((i8High * 2^32) + i8Low)/600000000 - timeShift)/1440
   End If
End Function


'_____________________________ [ LargeIntegerToMinutes ]
'
'
Function LargeIntegerToMinutes(value)
'nimmmt einen Microsoft LargeInteger Wert (Integer8) und gibt das entsprechende ...
'... Zeitinterval in Minuten zurück (-1 für "Never")

   If (value.HighPart = -2147483648) And (value.LowPart = 0) then
       LargeIntegerToMinutes = -1
   Else
       i8High = value.HighPart
       i8Low = value.LowPart
       If (i8Low < 0) Then
           i8High = i8High + 1
       End If

       LargeIntegerToMinutes = -(((i8High * 2^32) + i8Low)/600000000)
   End If
End Function

 

Vorsicht, wenn du >1000 Benutzer hast, dann mußt Du eine PagedResults-Suche durchführen. Dann muß nochmal ein bisschen verändert werden, siehe hier:

 

SelfADSI : LDAP Objekte im Verzeichnis suchen mit ADO

 

Gruß,

Philipp

Share this post


Link to post

Danke Danke für die zahlreichen Antworten! :-)

 

Ich habe nun die DLL registriert. Mit dem Befehl W32tm /ntte <integer> kann man den Wert von pwdlastset im cmd Fenster auch umrechnen lassen. Ich habe nämlich versucht einen neuen Wert in pwdlastset einzufügen, damit ich ablaufende Accounts simulieren kann. Leider sagt mir ADSIEDIT dauernd, es wäre ein falscher Wert. Weiss jmd zufällig wie ich das Kennwortalter manipulieren kann? Habe leider keine Testumgebung und die Kennwortrichtlinie will ich nicht anfassen, gibt nur Schläge vom Chef ;-)

 

Greetz

Share this post


Link to post

Moin,

 

doch, du hast eine Testumgebung. Du hast aber keine Produktionsumgebung.

 

Manipulationen dieser Art führt man nicht in einem produktiven AD aus! Schnapp dir einen Virtualisierer und baue dir eine Test-VM!

 

Gruß, Nils

Share this post


Link to post

Hallo, ich auch nochmal,

 

also Du kannst den Wert von pwdLastSet auch garnicht auf einen bestimmten Wert ändern, selbst wenn du den korrekten Integer8-Wert eines bestimmten Datums hast. Nur die Werte 0 und -1 sind erlaubt, ansonsten gibt's ein Fehler DSID-031A0FB6 Invalid Argument...

 

Wenn Du eine W2K8 Umgebung hast, dann setz eine Fine Grained Password Policy und lass für deinen einen Testuser das PAsswort in einem Tag ablaufen....Ansonsten setzt Du Dir tatsächlich lieber mal kurz ein Test-AD auf, in dem du die Domain Paswortrichtlinien setzen kannst.

 

Gruß,

Philipp

Share this post


Link to post
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte überlege Dir, ob es nicht sinnvoller ist ein neues Thema zu erstellen.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

Werbepartner:



×
×
  • Create New...