Hallo,
wie kann ich ein gegebenes Datum in einen gültigen Integer8-Wert für das ActiveDirectory umrechnen?
Hallo,
wie kann ich ein gegebenes Datum in einen gültigen Integer8-Wert für das ActiveDirectory umrechnen?
hab da grad ein vbs script bei mir gefunden ... eventuell hilft dir das weiter ...
'http://www.selfadsi.de/deep-inside/microsoft-integer8-attributes.htm
'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")
'llValue = obj.GetEx("lastLogonTimeStamp")
'nicht vergessen: GetEx gibt stets ein Array zurück!
'WScript.Echo LargeIntegerToDate(llValue(0))
'zeigt den Integer8 Wert des aktuellen Datums+Uhrzeit...
'WScript.Echo
DateToLargeIntegerString(Now)
Function LargeIntegerToDate(value)
'nimmmt einen Microsoft LargeInteger Wert (Integer8) und gibt das entsprechende Datum plus Uhrzeit zurück
'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
'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
'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
Function DateToLargeIntegerString(value)
'nimmt ein Datun+Uhrzeit und gibt den entsprechenden Microsoft LargeInteger Wert (Integer8) zurück
'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
'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)
'in Nano-Sekunden umrechnen
DateToLargeIntegerString = CStr(secs) & "0000000"
llt = DateToLargeIntegerString
value=InputBox(value,"berechnet w32 /ntte xxxx",llt)
End Function
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.
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.
ich hab das damals in autoit auch nicht gefunden und deshalb das vbs benutzt!
hast du mal danach gesucht? im engl. forum gibt es noch beiträge dazu ...
hier mal einer .... http://www.autoitscript.com/forum/topic/10…teger8-to-date/
eventuell das powershell aus autoit aus aufrufen!
gruß gmmg
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