koluschkib
Goto Top

Mit VBS passwortgültigkeit im AD auslesen

Hallo Admin-Freunde

hab mal ne frage zum Auslesen von Daten aus dem AD

Ich soll ein VB-Script schrieben, was auf einem Terminal-Server durch jeden Benutzer ausführbar sein soll. Das Script soll das AD auslesen, um genau zu sein die Passwortgültigkeit.

Nun zu der Funktion selbst:

Der Terminal-Server User (nicht Admin) soll das Script straten können.
Das Script liest aus dem AD die Passwortgültigkeit und gibt folgenden meldung

MSGbox = ("Ihr Passwort ist noch 14Tage Gültig, um es zu ändern drücken Sie Strg+F1 um es zu ändern")  

(Auf nem Terminal Server kann man nicht Strg-Alt-Entf drücken, wie es halt bei nem Win-Client üblich ist um das PW zu ändern)

Sollte das Passwort mehr als 14 Tage gültig sein, soll nur die genau Anzahl ausgegeben werden.

Quasi:
Msgbox = ("Ihr Passwort ist noch 21 tage gültig und nu weiter Arbeiten!!!")  

Das Script muss also die genau Tagesanzahl ausgeben bzw. Sie richtig verarbeiten können.

hab schon bisschen geschaut und die allwissende platform befragt, hab aber nur befehle für cmd gefunden

net user "benutzername", aber das ist nun mal nicht das was ich suche  

hoffe jemand von euch kann mir nen Tipp oder ne hilfestellung geben, denn irgendwie komme ich da nicht wirklich voran

gruß und danke für alle Tipps im vorraus

koluschkiB

Content-Key: 144395

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

Printed on: April 20, 2024 at 06:04 o'clock

Member: bastla
bastla Jun 08, 2010 at 13:36:06 (UTC)
Goto Top
Hallo koluschkiB!

Zur Abwechslung mal ein "ganz gewöhnlicher" MS-Link: http://msdn.microsoft.com/en-us/library/ms974598.aspx

Grüeß
bastla
Member: koluschkiB
koluschkiB Jun 08, 2010 at 13:57:00 (UTC)
Goto Top
hey Bastla,

und Danke für die schnelle Antwort. Aber irgendwie blicke ich da nicht richtig durch. Hab aber was evtl. passendes gefunden, aber leider haut mir das Script ne fehlermeldung raus und ich weiss nicht warum

'========================================  
' First, get the domain policy.  
'========================================  
Dim oDomain
Dim oUser
Dim maxPwdAge
Dim numDays
  
strDomainDN = "testAD.com"  
strUserDN = strDomainDN & "/CN=koluschkiB,CN=Users,DC=testAD,DC=com"  
    
Set oDomain = GetObject("LDAP://" & strDomainDN)  
Set maxPwdAge = oDomain.Get("maxPwdAge")  

'========================================  
' Calculate the number of days that are  
' held in this value.  
'========================================  
numDays = CCur((maxPwdAge.HighPart * 2 ^ 32) + _
                    maxPwdAge.LowPart) / CCur(-864000000000)
Msgbox = ("Maximum Password Age: " & numDays)  
    
'========================================  
' Determine the last time that the user  
' changed his or her password.  
'========================================  
Set oUser = GetObject("LDAP://" & strUserDN)  

'========================================  
' Add the number of days to the last time  
' the password was set.  
'========================================  
whenPasswordExpires = DateAdd("d", numDays, oUser.PasswordLastChanged)  
    
msgbox = ("Password Last Changed: " & oUser.PasswordLastChanged)  
msgbox = ("Password Expires On: " & whenPasswordExpires)  

'========================================  
' Clean up.  
'========================================  
Set oUser = Nothing
Set maxPwdAge = Nothing
Set oDomain = Nothing

msgbox = ("Done")  

der Fehler ist in der 22 Zeile "ungültige zuweisung MSGBOX" (häää?)
ich gehe mal aus, dass alles Msgbox denn fehler haben werden.

das Original script fand ich hier
http://support.microsoft.com/kb/323750

kann mir weiterhelfen?

gruß und Danke im vorraus

KoluschkiB
Member: koluschkiB
koluschkiB Jun 08, 2010 at 14:03:39 (UTC)
Goto Top
Edit:

hab aus allen MSgbox = Wscript.echo gemacht. soweit so gut. das Script liest das AD aus, aber gibt mir nur die Maximale Gültigkeitsdauer aus, sprich 90Tage. Wenn ich OK drücke kirge ich leider ne Fehlermeldung

"Fehler in zeile 28"
Eine Referenzauswertung wurde vom Server zurückgesendet

bedeutet es, dass ich nich das recht habe diese Infos auszulesen?

vielleicht kann es mir einer erklären wieso und weshalb

Gruß und Danke

koluschkiB
Member: bastla
bastla Jun 08, 2010 at 14:44:42 (UTC)
Goto Top
Hallo koluschkiB!

Wäre Dir auch die Idee gekommen, dass "strUserDN" vielleicht nicht den richtigen Inhalt haben könnte?

Grüße
bastla
Member: koluschkiB
koluschkiB Jun 08, 2010 at 14:57:50 (UTC)
Goto Top
hey Bastla,

daran habe ich schon gedacht und hab in die 28 Zeile, werte Manuelle eingetragen. aber es brachte eben keine erfolg mitsich

Bsp:

cn= Hans Maulwurf
cn= Users
dc=testAD
dc=int

der benutzer Hans Maulwurf ist natürlich angelegt und hat auch n Passwort und das ganze. Check es aber nicht so richtig, wieso und weshalb.
Oder habe ich da irgendwo nen denkfehler und sehe es nicht?

Der User Maulwurf ist ein Bsp. ich verwende natürlich meinen eigenen namen in meiner Domain.

gruß

koluschkiB
Member: bastla
bastla Jun 08, 2010 at 15:27:18 (UTC)
Goto Top
Hallo koluschkiB!

Eigentlich liegt der Fehler ja in Zeile 11 (ich hatte gehofft, Du findest ihn selbst) ...

Wie sieht denn jetzt Deine Zeile 28 (meinetwegen auch mit "Maulwurf") konkret aus?

Grüße
bastla
Member: koluschkiB
koluschkiB Jun 09, 2010 at 06:22:01 (UTC)
Goto Top
Moin Bastla,

also, ich hab einfach das "/" in der 11 Zeile vor CN= weg gemacht und er hat mir dort wenigstens keine Fehlermeldung mehr raus, gehe also davon aus, dass dort einfach dieses Zeichen zuviel war.
Wie dem auch sei, jetzt ist natürlich der Fehler an einer anderen Stelle...

Zeile 34 ---> Das Objekt unterstützt diese Eigenschaft oder Methode nicht: 'PasswordLastChanged'

Hast du nen Tipp was statt dem Password... dort hin schrieben könnte?
Etwas was das Objekt dementsprechend auch kennt?

verstehe auch nicht so ganz, wieso man bei Microsoft Quellcodes mit Fehlern bzw unbekannten dingen bereitstellt... als würde das keiner Testen...

Gruß und Danke für die Hilfe

koluschkiB
Member: koluschkiB
koluschkiB Jun 09, 2010 at 06:32:02 (UTC)
Goto Top
Morgen noch mal,

habs nun PasswordLastChagend ---> pwdlastSet geändert. Leider trritt folgendes problem auf

Das Script gibt mir alles raus ohne einen Fehler zu versuchen, aber...

Das Datum Stimmt nicht, Das Script zeigt mir, dass das PW 90 Tage Gültig ist. Als System Datum verwendet er 01.01.1900, was eben dazu führt, dass das Password am 30.03.1900 ungültig wird. Das Echo gibt mir auch keinen Wert aus, wann das Passwort geändert wurde. ich gehe davon aus, dass es daran liegt.

1900?? 2010?? hää??

in denn Quellcode habe ich meinen Namen Eingetragen und auch die Domain usw. Ich weiss das mein Password anfang Juli auslaufen wird und nicht am 30. März 1900...

hoffe einer kann mir helfen, ich verzweifel schon langsam

'========================================  
' First, get the domain policy.  
'========================================  
Dim oDomain
Dim oUser
Dim maxPwdAge
Dim numDays
  
strDomainDN = "GOE.AD.SYCOR.de"  
strUserDN = strDomainDN & "CN=******* *******,CN=Users,DC=***********,DC=**"  
    
Set oDomain = GetObject("LDAP://" & strDomainDN)  
Set maxPwdAge = oDomain.Get("maxPwdAge")  

'========================================  
' Calculate the number of days that are  
' held in this value.  
'========================================  
numDays = CCur((maxPwdAge.HighPart * 2 ^ 32) + _
                    maxPwdAge.LowPart) / CCur(-864000000000)
Wscript.Echo "Maximum Password Age: " & numDays  
    
'========================================  
' Determine the last time that the user  
' changed his or her password.  
'========================================  
Set oUser = GetObject("LDAP://"& strDomainDN)  

'========================================  
' Add the number of days to the last time  
' the password was set.  
'========================================  
whenPasswordExpires = DateAdd("d", numDays, oUser.pwdlastset)  
    
Wscript.Echo "Password Last Changed: " & oUser.pwdlastset  
Wscript.Echo "Password Expires On: " & whenPasswordExpires  

'========================================  
' Clean up.  
'========================================  
Set oUser = Nothing
Set maxPwdAge = Nothing
Set oDomain = Nothing

Wscript.Echo "Done"  

danke im vorraus

koluschkiB
Member: koluschkiB
koluschkiB Jun 09, 2010 at 06:43:38 (UTC)
Goto Top
Hab auch schon mit folgendem Quellcode versucht die Passwortgültigkeit auszulesen;

Const ADS_UF_DONT_EXPIRE_PASSWD = &h10000
Const E_ADS_PROPERTY_NOT_FOUND  = &h8000500D
Const ONE_HUNDRED_NANOSECOND    = .000000100
Const SECONDS_IN_DAY            = 86400

Set objUser = GetObject("LDAP://CN=******* *******,CN=Users,DC=***********,DC=**")  

intUserAccountControl = objUser.Get("userAccountControl")  
If intUserAccountControl And ADS_UF_DONT_EXPIRE_PASSWD Then     ' LINE 11  
    WScript.Echo "The password does not expire."  
    WScript.Quit
Else
    dtmValue = objUser.PasswordLastChanged
    If Err.Number = E_ADS_PROPERTY_NOT_FOUND Then               ' LINE 16  
        WScript.Echo "The password has never been set."  
        WScript.Quit
    Else
        intTimeInterval = Int(Now - dtmValue)
        WScript.Echo "The password was last set on " & _  
          DateValue(dtmValue) & " at " & TimeValue(dtmValue)  & vbCrLf & _  
          "The difference between when the password was last" & vbCrLf & _  
          "set and today is " & intTimeInterval & " days"  
    End If

    Set objDomain = GetObject("LDAP://DC=***********,DC=**")  
    Set objMaxPwdAge = objDomain.Get("maxPwdAge")  

    If objMaxPwdAge.LowPart = 0 Then
        WScript.Echo "The Maximum Password Age is set to 0 in the " & _  
                     "domain. Therefore, the password does not expire."  
        WScript.Quit
    Else
        dblMaxPwdNano = _
            Abs(objMaxPwdAge.HighPart * 2^32 + objMaxPwdAge.LowPart)
        dblMaxPwdSecs = dblMaxPwdNano * ONE_HUNDRED_NANOSECOND  ' LINE 37  
        dblMaxPwdDays = Int(dblMaxPwdSecs / SECONDS_IN_DAY)     ' LINE 38  
        WScript.Echo "Maximum password age is " & dblMaxPwdDays & " days"  

        If intTimeInterval >= dblMaxPwdDays Then
            WScript.Echo "The password has expired."  
        Else
            WScript.Echo "The password will expire on " & _  
              DateValue(dtmValue + dblMaxPwdDays) & " (" & _  
              Int((dtmValue + dblMaxPwdDays) - Now) & " days from today)."  
        End If
    End If
End If

Leider ebenfalls ohne erfolg. Fehler in Zeile 8.

> Eine Referenzauswertung wurde vom Server zurückgesendet

Dabei sind die Werte im LDAP richtig, hab sie aus dem anderem Quellcode übernommen.
Ich chechs einfach nicht face-sad

Gruß

koluschkiB
Member: koluschkiB
koluschkiB Jun 09, 2010 at 08:54:27 (UTC)
Goto Top
Mahlzeit face-smile

Problem gelöst und Auftrag erfolgreich Abegschlossen

Const ADS_UF_DONT_EXPIRE_PASSWD = &h10000
Const E_ADS_PROPERTY_NOT_FOUND  = &h8000500D
Const ONE_HUNDRED_NANOSECOND    = .000000100
Const SECONDS_IN_DAY            = 86400

Set objADSystemInfo = CreateObject("ADSystemInfo")              
Set objUser = GetObject("LDAP://" & objADSystemInfo.UserName)    

Set objDomain = GetObject("LDAP://" & objADSystemInfo.DomainDNSName)  
Set objMaxPwdAge = objDomain.Get("maxPwdAge")  

intUserAccountControl = objUser.Get("userAccountControl")  

dtmValue = objUser.PasswordLastChanged

dblMaxPwdNano = _
Abs(objMaxPwdAge.HighPart * 2^32 + objMaxPwdAge.LowPart)
dblMaxPwdSecs = dblMaxPwdNano * ONE_HUNDRED_NANOSECOND
dblMaxPwdDays = Int(dblMaxPwdSecs / SECONDS_IN_DAY)

If Int((dtmValue + dblMaxPwdDays) - Now) < 30 Then
Wscript.Echo "Das Passwort muss geändert werden, es läuft in " & Int((dtmValue + dblMaxPwdDays) - Now) & "Tagen ab. Um dies zu tun drücken Sie Strg+F1"  
Else
Wscript.Quit
End If

Danke an alle die mich dabei mit Hilfestellungen unterstürtzt haben

Gruß

KoluschkiB