Vbscript 在Active Directory脚本的域控制器上获取日期格式(美国或澳大利亚)

Vbscript 在Active Directory脚本的域控制器上获取日期格式(美国或澳大利亚),vbscript,active-directory,Vbscript,Active Directory,我有一个VBScript来提取特定日期之间的域上的用户,以便修改他们的帐户 有时,我注意到当我延长到期日时,它会将我设置的日期(澳大利亚格式dd/mm/yyyy)反转为美国格式 我应该如何处理这个问题,我应该检查域控制器日期格式吗?如果是,我如何从域控制器获取该信息 或者它们是VBA中类似代码的格式…因此我可以设置日期“我的方式”…也许我应该将所有内容转换为VBA 这是我的基本代码 Start_Date = 01/08/2014 ' 1st august 2014 Days =

我有一个VBScript来提取特定日期之间的域上的用户,以便修改他们的帐户

有时,我注意到当我延长到期日时,它会将我设置的日期(澳大利亚格式dd/mm/yyyy)反转为美国格式

我应该如何处理这个问题,我应该检查域控制器日期格式吗?如果是,我如何从域控制器获取该信息

或者它们是VBA中类似代码的格式…因此我可以设置日期“我的方式”…也许我应该将所有内容转换为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
开始日期=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()
函数