|

楼主 |
发表于 2015-4-27 08:17:39
|
显示全部楼层
使用 VBScript 和 ADSI
ADSI 可以使支持目录的应用程序的开发工作更加轻松。您可以使用 VBScript 或 Microsoft JScript® 开发软件编写脚本以执行批量目录操作(与 Windows Script Host 一起使用)。在本指南中,使用 VBScript 编写的简单应用程序执行上一节描述的过程(它使用的是 LDIF)。
注 意,这些脚本不包括任何错误检查,这意味着它们不提供 VBScript 和 ADSI 程序员参考。此处包含的所有示例都假设:您使用正确的凭据登录到作为目标域成员的计算机上。在 ADSI 中,可以明确指定凭据和目标域。完成每个过程后,请检查“Active Directory 用户和计算机”管理单元,确认条目已修改。
导出对象
本示例中使用文本编辑器(如“记事本”)来创建 VBScript 程序。该脚本搜索“Marketing”OU 并创建一个文本文件,该文件中将列出所有用户对象及其属性子集。
创建并执行导出脚本
1. 单击“开始”按钮,单击“运行”,键入“Notepad export.vbs”,然后单击“确定”。在出现相应提示时,单击“是”创建新的文件。将以下文本复制到“export.vbs”中。
'Global variables
Dim oContainer
Dim OutPutFile
Dim FileSystem
'Initialize global variables
Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject")
Set OutPutFile = FileSystem.CreateTextFile("marketing.txt", True)
Set oContainer=GetObject("LDAP://OU=Marketing,OU=Accounts,DC=contoso,DC=com")
'Enumerate Container
EnumerateUsers oContainer
'Clean up
OutPutFile.Close
Set FileSystem = Nothing
Set oContainer = Nothing
WScript.Echo "Finished"
WScript.Quit(0)
Sub EnumerateUsers(oCont)
Dim oUser
For Each oUser In oCont
Select Case LCase(oUser.Class)
Case "user"
If Not IsEmpty(oUser.distinguishedName) Then
OutPutFile.WriteLine "dn: " & oUser.distinguishedName
End If
If Not IsEmpty(oUser.name) Then
OutPutFile.WriteLine "name: " & oUser.Get ("name")
End If
If Not IsEmpty(oUser.streetAddress) Then
OutPutFile.WriteLine "streetAddress: " & oUser.streetAddress
End If
If Not IsEmpty(oUser.l) Then
OutPutFile.WriteLine "l: " & oUser.l
End If
If Not IsEmpty(oUser.st) Then
OutPutFile.WriteLine "st: " & oUser.st
End If
If Not IsEmpty(oUser.postalcode) Then
OutPutFile.WriteLine "postalcode: " & oUser.postalcode
End If
Case "organizationalunit", "container"
EnumerateUsers oUser
End Select
OutPutFile.WriteLine
Next
End Sub
2. 保存“export.vbs”,然后关闭“记事本”。
3. 在“命令提示符”窗口中,键入“export.vbs”,然后按“Enter”键。
注意:执行 export.vbs 操作可创建 Marketing.txt 文件,该文件包含用户及其属性子集的列表。
在 进行适当的修改后,该脚本就可以与支持 Microsoft 组件对象模型 (COM) 和 Visual Basic 技术的任何应用程序一起使用了。这些应用程序包括 Visual Basic、Excel 以及 Microsoft Access。Internet Explorer 和 Internet 信息服务也支持脚本。
修改对象
在本示例中,将更改“Marketing”OU 内的所有用户地址属性。可使用简单的 VBScript 程序,对“Marketing”组织中的所有用户对象进行批量修改。该脚本修改省/自治区、街道、县/市以及邮政编码属性。
创建并执行修改对象脚本
1. 单击“开始”按钮,单击“运行”,键入“Notepad modify.vbs”,然后单击“确定”。在出现相应提示时,单击“是”创建新的文件。将以下文本复制到“modify.vbs”中。
Dim oContainer
Set oContainer=GetObject("LDAP://OU=Marketing,OU=Accounts,DC=contoso,DC=com")
ModifyUsers oContainer
'cleanup
Set oContainer = Nothing
WScript.Echo "Finished"
WScript.Quit
Sub ModifyUsers(oObject)
Dim oUser
oObject.Filter = Array("user")
For Each oUser in oObject
oUser.Put "st","Washington"
oUser.Put "streetAddress","One Microsoft Way"
oUser.Put "postalCode","98052"
oUser.Put "l","Redmond"
oUser.SetInfo
Next
End Sub
2. 保存“modify.vbs”,然后关闭“记事本”。
3. 在“命令提示符”窗口中,键入“modify.vbs”,然后按“Enter”键。
创建和删除对象
本示例中使用 VBScript 将新用户添加到“Marketing”组织中。该示例说明可以使用 ADSI 和 VBScript 非常方便地以编程方式访问目录。注意,在本示例中,在用户创建期间只配置了一组有限的属性。
创建并执行对象创建脚本
1. 单击“开始”按钮,单击“运行”,键入“Notepad add.vbs”,然后单击“确定”。在出现相应提示时,单击“是”创建新的文件。将以下文本复制到“add.vbs”中。
Dim oContainer
Dim oUser
Set oContainer=GetObject("LDAP://OU=Marketing,OU=Accounts,DC=contoso,DC=com")
'Create user
Set oUser = oContainer.Create("User","CN=Pilar Ackerman")
'Assign values to user attributes
oUser.Put "samAccountName","Pilar"
oUser.Put "givenName","Pilar"
oUser.Put "sn","Ackerman"
oUser.Put "userPrincipalName","pilar@contoso.com"
oUser.SetInfo
'Clean up
Set oUser = Nothing
Set oContainer = Nothing
WScript.Echo "Finished"
WScript.Quit
2. 保存“add.vbs”,然后关闭“记事本”。
3. 在“命令提示符”窗口中,键入“add.vbs”,然后按“Enter”键。
创建并执行对象删除脚本
1. 单击“开始”按钮,单击“运行”,键入“Notepad delete.vbs”,然后单击“确定”。在出现相应提示时,单击“是”创建新的文件。将以下文本复制到“delete.vbs”中。
Dim oContainer
Set oContainer=GetObject("LDAP://OU=Marketing,OU=Accounts,DC=contoso,DC=com")
'Delete user
oContainer.Delete "user","CN=Pilar Ackerman"
'Clean up
Set oContainer = Nothing
WScript.Echo "Finished"
WScript.Quit
2. 保存“delete.vbs”,然后关闭“记事本”。
3. 在“命令提示符”窗口中,键入“delete.vbs”,然后按“Enter”键。
“常规”标签
姓 Sn
名 Givename
英文缩写 Initials
显示名称 displayName
描述 Description
办公室 physicalDeliveryOfficeName
电话号码 telephoneNumber
电话号码:其它 otherTelephone 多个以英文分号分隔
电子邮件 Mail
网页 wWWHomePage
网页:其它 url 多个以英文分号分隔
“地址”标签
国家/地区 C 如:中国CN,英国GB
省/自治区 St
市/县 L
街道 streetAddress
邮政信箱 postOfficeBox
邮政编码 postalCode
“帐户”标签
用户登录名 userPrincipalName 形如:javazeke@qq.com
用户登录名(以前版本) sAMAccountName 形如:S1
登录时间 logonHours
登录到 userWorkstations 多个以英文逗号分隔
用户帐户控制 userAccountControl (启用:512,禁用:514, 密码永不过期:66048)
帐户过期 accountExpires
“配置文件”标签
配置文件路径 profilePath
登录脚本 scriptPath
主文件夹:本地路径 homeDirectory
连接 homeDrive
到 homeDirectory
“电话”标签
家庭电话 homePhone (若是其它,在前面加other。)
寻呼机 Pager 如:otherhomePhone。
移动电话 mobile 若多个以英文分号分隔。
传真 FacsimileTelephoneNumber
IP电话 ipPhone
注释 Info
“单位”标签
职务 Title
部门 Department
公司 Company
“隶属于”标签
隶属于 memberOf 用户组的DN不需使用引号, 多个用分号分隔
“拨入”标签 远程访问权限(拨入或VPN) msNPAllowDialin
允许访问 值:TRUE
拒绝访问 值:FALSE
回拨选项 msRADIUSServiceType
由呼叫方设置或回拨到 值:4
总是回拨到 msRADIUSCallbackNumber
“环境”、“会话”、“远程控制”、“终端服务配置文件”、“COM+”标签
属性
显示名称 属性名称
First Name givenName
Last Name sn
Initials initials
Description description
Office physicalDeliveryOfficeName
Telephone Number telephoneNumber
Telephone: Other otherTelephone
E-Mail mail
Web Page wwwHomePage
Web Page: Other url
帐号属性:
显示名称 属性名称
UserLogon Name userPrincipalName
User logon name (pre-Windows 2000) sAMAccountname
Logon Hours logonHours
Log On To logonWorkstation
Account is locked out userAccountControl
User must change password at next logon pwdLastSet
User cannot change password N/A
Other Account Options userAccountControl
Account Expires accountExpires
地址属性
显示名称 属性名称
Street streetAddress
P.O.Box postOfficeBox
City l
State/Province st
Zip/Postal Code postalCode
Country/Region c , co , and countryCode
成员属性
显示名称 属性名称
Member of memberOf
Set Primary Group primaryGroupID
组织属性
显示名称 属性名称
Title title
Department department
Company company
Manager:Name manager
Direct Reports directReports
外型属性
显示名称 属性名称
Profile Path profilePath
Logon Script scriptPath
Home Folder: Local Path homeDirectory
Home Folder: Connect homeDrive
Home Folder: To homeDirectory
电话相关属性
显示名称 属性名称
Home telephoneNumber
Home: Other otherTelephone
Pager pager
Pager: Other pagerOther
Mobile mobile
Mobile: Other otherMobile
Fax facsimileTelephoneNumber
Fax: Other otherFacsimileTelephoneNumber
IP phone ipPhone
IP phone: Other otherIpPhone
Notes info
|
|