Vbscript 在Active Directory脚本的域控制器上获取日期格式(美国或澳大利亚)
我有一个VBScript来提取特定日期之间的域上的用户,以便修改他们的帐户 有时,我注意到当我延长到期日时,它会将我设置的日期(澳大利亚格式dd/mm/yyyy)反转为美国格式 我应该如何处理这个问题,我应该检查域控制器日期格式吗?如果是,我如何从域控制器获取该信息 或者它们是VBA中类似代码的格式…因此我可以设置日期“我的方式”…也许我应该将所有内容转换为VBA 这是我的基本代码Vbscript 在Active Directory脚本的域控制器上获取日期格式(美国或澳大利亚),vbscript,active-directory,Vbscript,Active Directory,我有一个VBScript来提取特定日期之间的域上的用户,以便修改他们的帐户 有时,我注意到当我延长到期日时,它会将我设置的日期(澳大利亚格式dd/mm/yyyy)反转为美国格式 我应该如何处理这个问题,我应该检查域控制器日期格式吗?如果是,我如何从域控制器获取该信息 或者它们是VBA中类似代码的格式…因此我可以设置日期“我的方式”…也许我应该将所有内容转换为VBA 这是我的基本代码 Start_Date = 01/08/2014 ' 1st august 2014 Days =
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
开始日期=2014年8月1日'2014年8月1日
天数=2014年8月28日'2014年8月28日
合并日期=日期添加(“d”,天,开始日期)
开始日期=日期添加(“n”,lngBias,开始日期)
合并日期=日期添加(“n”,lngBias,合并日期)
lngSeconds1=DateDiff(“s”,1/1/1601,开始日期)
lngSeconds2=DateDiff(“s”,1/1/1601,合并日期)
str64Bit1=CStr(lngSeconds1)和“0000000”
str64Bit2=CStr(lngSeconds2)和“0000000”
'##############################################################
设置objRootDSE=GetObject(“LDAP://RootDSE”)
strDomain=objrootdes.Get(“DefaultNamingContext”)
'我的筛选器以获取在未禁用日期之间过期的用户。
SearchBy=“;”&_
(&(objectclass=user)(objectcategory=person)(accountExpires>=”&)_
str64Bit1&“(accountExpires我们不需要知道脚本运行机器或数据保存服务器的区域性、语言或区域设置,因为日期/时间值的内部表示不依赖于这些
对于日期/时间输入,使用日期文字,即表示散列符号(#)中包含的日期和/或时间的字符串、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
对于输出,我们将使用带有适当(内置于VBScript中)日期格式常量的FormatDateTime
函数:
Wscript.Echo FormatDateTime( Start_Date, vbGeneralDate)
Wscript.Echo FormatDateTime( Start_Date, vbLongDate)
Wscript.Echo FormatDateTime( Start_Date, vbShortDate)
而且,-code>myUser.AccountExpirationDate
不是vbscript datetime变量,因此您可能无法对其应用FormatDateTime()
函数