Datum in Integer8 (AD accountExpires)

  • Masterofdwc

    hab da grad ein vbs script bei mir gefunden ... eventuell hilft dir das weiter ...

    Spoiler anzeigen
    [autoit]


    'http://www.selfadsi.de/deep-inside/microsoft-integer8-attributes.htm

    [/autoit] [autoit][/autoit] [autoit]

    'hier müssen Sie einen Distinguished Name eines Benutzers Ihrer eigenen Umgebung einsetzen!
    'Set obj = GetObject("LDAP://cn=Administrator,cn=Users,dc=cerrotorre,dc=de")

    [/autoit] [autoit][/autoit] [autoit]

    'llValue = obj.GetEx("lastLogonTimeStamp")
    'nicht vergessen: GetEx gibt stets ein Array zurück!
    'WScript.Echo LargeIntegerToDate(llValue(0))

    [/autoit] [autoit][/autoit] [autoit]

    'zeigt den Integer8 Wert des aktuellen Datums+Uhrzeit...
    'WScript.Echo
    DateToLargeIntegerString(Now)

    [/autoit] [autoit][/autoit] [autoit]

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

    [/autoit] [autoit][/autoit] [autoit]

    'erst die lokale Zeitabweichung aus der Registry auslesen
    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

    [/autoit] [autoit][/autoit] [autoit]

    'der Large Integer wird mit zwei Long Werten gehandhabt (HighPart und LowPart)
    i8High = value.HighPart
    i8Low = value.LowPart
    If (i8Low < 0) Then
    i8High = i8High + 1
    End If

    [/autoit] [autoit][/autoit] [autoit]

    'das Datum und die Uhrzeit ausrechnen: 100-Nanosecond-Schritte seit dem 1. Januar 1601
    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

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Function DateToLargeIntegerString(value)
    'nimmt ein Datun+Uhrzeit und gibt den entsprechenden Microsoft LargeInteger Wert (Integer8) zurück

    [/autoit] [autoit][/autoit] [autoit]

    'erst die lokale Zeitabweichung aus der Registry auslesen
    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

    [/autoit] [autoit][/autoit] [autoit]

    'die Zeit von lokaler Zeit in UTC umrechnen
    value = DateAdd("n", timeShift, value)
    'msgbox(value)
    value=InputBox(value,"Enter Date",value)

    'wieviele Sekunden seit 1601 sind vergangen?
    secs = DateDiff("s", #1/1/1601#, value)

    [/autoit] [autoit][/autoit] [autoit]

    'in Nano-Sekunden umrechnen
    DateToLargeIntegerString = CStr(secs) & "0000000"
    llt = DateToLargeIntegerString
    value=InputBox(value,"berechnet w32 /ntte xxxx",llt)
    End Function

    [/autoit]

    gruß gmmg

  • Schau Dir mal meine AD UDF an. Die hat Funktionen um das Expiration Date abzufragen, zu setzen bzw. alle abgelaufenen Accounts zu listen.

  • gmmg:

    Vielen Dank. Aber ich will eigentlich kein externes Skript dafür verwenden (In Powershell ist das übrigens nur ein 1-Zeiler-> Get-Date "1/1/2009").ToFileTime() ).
    Hatte gehofft, dass es soetwas auch in AutoIt gibt und ich nur zu doof bin es zu finden.


    water

    Danke für den Hinweis. Mir gehts hier aber wirklich um die Berechnung, da ich den Datumscode an einer anderen Stelle benötige. Habe mir die AD-UDF angesehen. Konnte da aber keine Berechnung finden, welche ich für meine Zwecke "klauen" könnte. :(

  • Ja dann. Neuer Versuch:
    Ich beziehe meine Weisheiten aus vielen verschiedenen Quellen im Web. Eine davon ist die Seite von Richard L. Mueller.
    Hier beschreibt er, wie man mit Integer8 umgeht und hat auch einige Beispielscripte (VB) dabei. Die sollten sich leicht in AutoIt umsetzen lassen.
    http://www.rlmueller.net/Integer8Attributes.htm