我有一个VBScript可以提取某个日期之间的域中的用户,以便我可以修改其帐户。
有时,我会注意到,当我延长有效期时,它会将我设置的日期(澳大利亚格式dd / mm / yyyy)逆转为美国格式...。
我应该如何解决这个问题,是否应该检查域控制器的日期格式-如果是这样,如何从域控制器获取该信息?
还是他们的代码像VBA中的FORMAT ...所以我可以将日期设置为“我的方式” ....也许我应该将所有内容都转换为VBA。
这是我的代码的基础...
Start_Date = 01/08/2014 ' 1st august 2014
Days = 28/08/2014 '28th august 2014
Combined_Date = DateAdd("d", Days, Start_Date)
Start_Date = DateAdd("n", lngBias, Start_Date)
Combined_Date = DateAdd("n", lngBias, Combined_Date)
lngSeconds1 = DateDiff("s", #1/1/1601#, Start_Date)
lngSeconds2 = DateDiff("s", #1/1/1601#, Combined_Date)
str64Bit1 = CStr(lngSeconds1) & "0000000"
str64Bit2 = CStr(lngSeconds2) & "0000000"
'##############################################################
Set objRootDSE = GetObject("LDAP://RootDSE")
strDomain = objRootDSE.Get("DefaultNamingContext")
' my filter to get users that expiry between dates that are not disabled.
SearchBy = "<LDAP://" & strDomain & ">;" & _
"(&(objectclass=user)(objectcategory=person)(accountExpires>=" & _
str64Bit1 & ")(accountExpires<=" & str64Bit2 & ")(!(userAccountControl:1.2.840.113556.1.4.803:=2)));" & _
"distinguishedname;subtree"
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand = CreateObject("ADODB.Command")
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 100000
objCommand.Properties("Timeout") = 300
objCommand.Properties("Size Limit") = 750000
objCommand.CommandText = SearchBy
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
objUserOU = objRecordSet.Fields("distinguishedname").Value
Set myUser = GetObject ("LDAP://" & objUserOU)
Wscript.Echo myUser.SamAccountName
Wscript.Echo myUser.DisplayName
Wscript.Echo myUser.AccountExpirationDate
Err.clear
objRecordSet.MoveNext
Loop
我们不需要知道脚本运行机的文化,语言或区域设置,也不需要数据保存服务器,因为日期/时间值的内部表示不依赖于这些值。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
对于日期/时间输入,请使用日期文字,即代表一个日期和/或时间的字符串,该字符串括在井号(#)中,或者是DateSerial
/TimeSerial
函数,或者(不建议)字符串。接下来的Start_Date
变量条目都是等效的:
Dim Start_Date, Days, Combined_Date
'If Start_Date should be "1st august 2014"
'String (not recommended)
Start_Date = "1/8/2014"
'Literal
Start_Date = #2014-08-01# ' ISO format
Start_Date = #01-Aug-2014#
Start_Date = #Aug/1/2014#
Start_Date = #8/1/2014#
Start_Date = #8-1-2014#
'DateSerial() function
Start_Date = DateSerial( 2014, 8, 1)
接下来的两行代码片段应如下所示:
Days = 27
Combined_Date = DateAdd("d", Days, Start_Date) '28th august 2014
对于输出,我们将使用FormatDateTime
具有适当的(内置于VBScript中)日期格式常量的函数:
Wscript.Echo FormatDateTime( Start_Date, vbGeneralDate)
Wscript.Echo FormatDateTime( Start_Date, vbLongDate)
Wscript.Echo FormatDateTime( Start_Date, vbShortDate)
而且-恐怕-myUser.AccountExpirationDate
不是vbscript datetime变体,因此您可能无法对其应用FormatDateTime()
功能!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句