' GetOldInt8.vbs
'
' VBScript that will take a positive integer and subtract that number
' of days from the current day and time, then convert that date to
' an Integer8 value. This script was created specifically to assist
' in LDAP lookups of stale accounts, because the pwdLastChanged attribute
' is stored in AD as an Integer8 value.
'
' Changes: Added variables "TodaysDate" and "NumDays". Modified help
' to show new syntax. Added code segment to acquire today's date And
' time and subtract n days from it. Pass date piece to the rest of
' the script.
' ----------------------------------------------------------------------
' Notes from original code version by Richard L. Mueller
' ----------------------------------------------------------------------
' DateToInteger8.vbs
' Copyright (c) 2004 Richard L. Mueller
' Hilltop Lab web site - [URL unfurl="true"]http://www.rlmueller.net[/URL]
' Version 1.0 - June 11, 2004
'
' You have a royalty-free right to use, modify, reproduce, and
' distribute this script file in any way you find useful, provided that
' you agree that the copyright owner above has no warranty, obligations,
' or liability for such use.
'
'
' VBScript program demonstrating how to convert a datetime value to
' the corresponding Integer8 (64-bit) value. The Integer8 value is the
' number of 100-nanosecond intervals since 12:00 AM January 1, 1601,
' in Coordinated Universal Time (UTC). The conversion is only accurate
' to the nearest second, so the Integer8 value will always end in at
' least 7 zeros.
Option Explicit
Dim dtmDateValue, dtmAdjusted, lngSeconds, str64Bit
Dim objShell, lngBiasKey, lngBias, k, TodaysDate
Dim NumDays
If Wscript.Arguments.Count <> 1 Then
Wscript.Echo "Required argument <DateTime> missing"
Wscript.Echo "For example:"
Wscript.Echo ""
Wscript.Echo "cscript DateToInteger8.vbs ""2/5/2004 4:58:58 PM"""
Wscript.Echo ""
Wscript.Echo "If the date/time value has spaces, enclose in quotes"
Wscript.Quit
End If
NumDays = WScript.Arguments(0)
NumDays = 0 - NumDays
TodaysDate = CDate(Now())
dtmDateValue = DateAdd("d", NumDays, TodaysDate)
WScript.Echo dtmDateValue
'dtmDateValue = CDate(Wscript.Arguments(0))
' Obtain local Time Zone bias from machine registry.
Set objShell = CreateObject("Wscript.Shell")
lngBiasKey = objShell.RegRead("HKLM\System\CurrentControlSet\Control\" _
& "TimeZoneInformation\ActiveTimeBias")
If UCase(TypeName(lngBiasKey)) = "LONG" Then
lngBias = lngBiasKey
ElseIf UCase(TypeName(lngBiasKey)) = "VARIANT()" Then
lngBias = 0
For k = 0 To UBound(lngBiasKey)
lngBias = lngBias + (lngBiasKey(k) * 256^k)
Next
End If
' Convert datetime value to UTC.
dtmAdjusted = DateAdd("n", lngBias, dtmDateValue)
' Find number of seconds since 1/1/1601.
lngSeconds = DateDiff("s", #1/1/1601#, dtmAdjusted)
' Convert the number of seconds to a string
' and convert to 100-nanosecond intervals.
str64Bit = CStr(lngSeconds) & "0000000"
Wscript.Echo str64Bit