Csvde.exe 工具不如 Ldifde.exe 强大,因为 Csvde.exe 无法修改或删除现有目录对象。因此,如果计划根据 .csv 文件更新收件人信息,则必须提取相关的 .csv 条目并将其写入 .ldf 文件。然后可以如前面所述使用 Ldifde.exe。
以下 Excel 宏说明如何通过包含 proxyAddresses 属性的 .csv 文件生成 .ldf 文件。在此代码中,假定可分辨名称处于文件的第一列,并且在所有剩余信头单元格循环,以确定 proxyAddresses 列。结果为 .csv 文件中的每个收件人对象一个条目,用于修改 proxyAddresses 属性。此方法同样可以通过最少的修改应用于其他目录属性。
复制代码
Sub LDFfromCSV(Optional sAttribute As String = "proxyAddresses") ' Create the LDF file. sDefName = Application.DefaultFilePath & "\Import.ldf" sFile = Application.GetSaveAsFilename(InitialFilename:=sDefName, _ Title:="Save LDF file") If sFile = "" Then Exit Sub Else Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.CreateTextFile(sFile, True) End If ' Determine the number of entries in the .csv file. nRows = ActiveSheet.UsedRange.Rows.Count nColumns = ActiveSheet.UsedRange.Columns.Count For i = 2 To nRows ' Specify the distinguished name of each recipient ' for whom you want to modify a value. sVal = ActiveSheet.Cells(1, 1).Value & ": " _ & ActiveSheet.Cells(i, 1).Value _ & vbCrLf & "changetype: modify" & vbCrLf For j = 2 To nColumns sHdrValue = ActiveSheet.Cells(1, j).Value If sHdrValue = sAttribute Then ' You are now in the appropriate column. sVal = sVal & "replace: " & sHdrValue & vbCrLf _ & sHdrValue & ": " & ActiveSheet.Cells(i, j).Value _ & vbCrLf & "-" & vbCrLf End If Next sEntry = VBA.Replace(sVal, "\,", "\,", 1, -1, vbTextCompare) f.writeline sEntry Next f.Close Set f = Nothing Set fso = Nothing End Sub为了演示 .csv 文件如何转换为 .ldf 文件,使用 Csvde.exe 从“用户”容器导出对象。例如,键入以下命令:csvde -f export.csv -s <Domain Controller> -d "CN=Users,DC=<Domain>,DC=<com>"。在其他信息中,生成的文件包含所有已启用邮箱的用户帐户的 proxyAddresses 属性。然后,可以更改选定用户的 proxyAddresses 信息,并运行宏以生成 .ldf 文件。
通过 VBScript 更新收件人信息
如果要通过比 Ldifde.exe 和 Excel 宏更简单的方式更新收件人信息,可以在自定义管理工具中使用 ADSI 和 VBScript。以下代码示例说明如何使用 ADSI.User 对象来通过编程方式为用户帐户设置电子邮件地址。例如,可以在 ASP 页中使用此代码。记住,要包含用于权限检查和错误处理的自定义代码。该代码示例是 Active Directory 应用程序一个好的起点。
复制代码
Const ADS_PROPERTY_CLEAR = 1 Const ADS_PROPERTY_UPDATE = 2 Const ADS_PROPERTY_APPEND = 3 Const ADS_PROPERTY_DELETE = 4 Set oUser = GetObject("LDAP://CN=testuser,CN=Users,DC=contoso,DC=com") oUser.PutEx ADS_PROPERTY_UPDATE, "proxyAddresses", _ Array("SMTP:[email protected]", _ "SMTP:[email protected]", _ "X400:c=us;a= ;p=Exchange;o=Exchange;s=updateduser;") oUser.SetInfo重要信息:
与 Ldifde.exe 和 Csvde.exe 一样,必须先在计算机实验室中全面测试解决方案,然后再在生产环境中部署。ADSI 使用不当可能会破坏 ActiveDirectory 并强制您通过备份还原 Active Directory。确保域控制器和全局编录服务器拥有有效的备份。
附录 ― 使用 LDIFDE 语法
ldifde [-i] [-f FileName] [-s ServerName] [-c String1 String2] [-v] [-j Path] [-t PortNumber] [-d BaseDN] [-r LDAPFilter] [-p Scope] [-l LDAPAttributeList] [-o LDAPAttributeList] [-g] [-m] [-n] [-k] [-a UserDistinguishedName Password] [-b UserName Domain Password] [-?]
参数-i
?
指定导入模式。如果没有指定,则默认模式为导出。
-f FileName
?
指定导入或导出文件名称。
-s ServerName
?
指定执行导入或导出操作的域控制器。默认情况下,Ldifde 在安装了该实用工具的域控制器上运行。
-c String1 String2
?
使用 String2 代替出现的所有 String1。通常在以下情况下使用此参数:从一个域向另一个域导入数据,并且需要将导出域的可分辨名称 (String1) 替换为导入域的可分辨名称 (String2)。
-v
?
设置详细模式。
-j Path
?
设置日志文件位置。默认为当前路径。
-t PortNumber
?
指定 LDAP 端口号。默认 LDAP 端口为 389。全局编录端口为 3268。
-d BaseDN
?
为数据导出设置搜索库的可分辨名称。
-r LDAPFilter
?
为数据导出创建 LDAP 搜索筛选器。例如,要导出所有具有特定姓氏的用户,您可使用以下筛选器:-r (and(objectClass=User)(sn=Surname))。
-p Scope
?
设置搜索范围。搜索范围选项有 Base、OneLevel 或 SubTree。
-l LDAPAttributeList
?
设置在导出查询结果中返回的属性列表。如果省略该参数,则返回所有属性。
-o LDAPAttributeList
?
设置在导出查询结果中省略的属性列表。通常在以下情况下使用此参数:从 Active Directory 中导出对象,然后将其导入到另一个与 LDAP 兼容的目录中。如果另一个目录不支持这些属性,可使用该选项在结果集中省略这些属性。
-g
?
省略分页搜索。
-m
?
省略仅应用于 Active Directory 对象的属性,如 ObjectGUID、objectSID、pwdLastSet 以及 samAccountType 属性。
-n
?
省略二进制值的导出。
-k
?
忽略导入操作期间的错误并继续处理。以下内容是忽略的错误的完整列表:
?
对象已经是组成员
?
所导入的对象没有其他属性时发生的对象类冲突(意味着指定的对象类不存在)
?
对象已存在
?
约束冲突
?
属性或值已存在
?
无此对象
-a UserDistinguishedName Password
?
将命令设置为使用提供的用户可分辨名称和密码来运行。默认情况下,使用当前登录到网络上的用户的凭据运行命令。
-b UserName Domain Password
?
将命令设置为使用提供的用户名域密码来运行。默认情况下,使用当前登录到网络上的用户的凭据运行命令。
-?
?
显示命令菜单。
注释在创建用于 Ldifde 命令的导入文件时,可使用 changeType 值来定义导入文件包含的更改类型。您可以使用以下 changeType 值:
值
说明
Add
指定新内容包含在导入文件中。
modify
指定已在导入文件中修改现有内容。
delete
指定已在导入文件中删除内容。
以下内容是使用 add 值的 LDIF 导入文件格式示例。
DN: CN=SampleUser,DC=DomainName
changetype: add
CN: SampleUser
description: DescriptionOfFile
objectClass: User
sAMAccountName: SampleUser
示例若要只检索返回对象的可分辨名称、公用名称、名、姓以及电话号码,请键入:
-l DistinguishedName, CN, GivenName, SN, Telephone
要省略对象 GUID,请键入:
-o whenCreated, whenChanged, objectGUID
格式说明格式
含义
斜体
用户必须提供的信息
粗体
用户必须完全按显示内容准确键入的元素
省略号 (...)
可以在命令行中多次重复使用的参数
中括号内 ([])
可选项
大括号内 ({}) 用竖线 (|) 分隔的选项。例如:{even|odd}
选项集,用户只能从其中选择一个
Courier 字体
代码或程序输出