根据Excel中的数据修改帐户到期日期

时间:2014-07-28 14:20:55

标签: excel vbscript active-directory

我需要修改Active Directory用户帐户的到期日期,并根据Excel中的数据设置帐户名称和日期。

我有以下VBScript来设置AD到期日期,但我无法解决如何更改它以便将帐户名称和日期设置为Excel中特定单元格的到期日期。

目的是为我们每天必须做的这项任务提供轻松的批量管理。

Set objUser = GetObject _
  ("LDAP://cn=Joe.Bloggs,ou=Management,dc=AN,dc=Franz,dc=com")

objUser.AccountExpirationDate = "10/30/2014"
objUser.SetInfo

1 个答案:

答案 0 :(得分:0)

您的示例代码需要专有名称,因此您需要将帐户名称解析为用户对象的专有名称:

acct = "..."   'account name

Set rootDSE = GetObject("LDAP://rootDSE")

base   = "<LDAP://" & rootDSE.Get("DefaultNamingContext") & ">"
filter = "(&(objectClass=user)(objectCategory=person)(sAMAccountName=" _
         & acct & "))"
attr   = "distinguishedName"
scope  = "subtree"

Set conn = CreateObject("ADODB.Connection")
conn.Provider = "ADsDSOObject"
conn.Open "Active Directory Provider"

Set cmd = CreateObject("ADODB.Command")
Set cmd.ActiveConnection = conn
cmd.CommandText = base & ";" & filter & ";" & attr & ";" & scope

Set rs = cmd.Execute
Do Until rs.EOF
  dn = rs.Fields("distinguishedName").Value
  rs.MoveNext
Loop

WScript.Echo dn

由于AD查询需要相当多的样板代码,而我厌倦了不得不一遍又一遍地编写它,我将其包装在可重用的VBScript类(ADQuery)中。使用此类,您可以将查询简化为以下内容:

'<-- copy/paste class code here

acct = "..."   'account name

Set qry = New ADQuery
qry.Filter = "(&(objectClass=user)(objectCategory=person)(sAMAccountName=" _
             & acct & "))"

Set rs = qry.Execute
Do Until rs.EOF
  dn = rs.Fields("distinguishedName").Value
  rs.MoveNext
Loop

WScript.Echo dn

将您从ActiveXperts复制的代码中的专有名称替换为变量dn

objUser = GetObject("LDAP://" & dn)
objUser.AccountExpirationDate = "10/30/2014"
objUser.SetInfo

可以从Excel表格中读取帐户名称(如果已安装Excel):

Set xl = CreateObject("Excel.Application")
Set wb = xl.Workbooks.Open("C:\path\to\your.xlsx")
Set range = wb.Sheets(1).UsedRange

For i = range.Rows(1).Row To range.Rows(range.Rows.Count).Row
  acct = range.Cells(i, 1).Value
  'rest of your code here
Next

wb.Close
xl.Quit