由于我们初次安装Exchange后,需要大量对用户进行创建,所以实现用户的批量添加,避免重复的工作。下面我们来讨论,如何在win 2003下批量添加用户。
 
首先,我们来学习,什么是LDAP
LDAP是轻量目录访问协议(Lightweight Directory Access Protocol)的缩写,定义:是用来查询与更新AD的目录服务通信协议。是一种基于客户机/服务器模式的目录服务访问协议.其实是一话号码簿,LDAP是一种特殊的数据库。
Win2003采用的就是LDAP,反过来Liunx也可以采用LDAP哦。
LDAP最基本的形式是一个连接数据库的标准方式。该数据库为读查询作了优化。因此它可以很快地得到查询结果,不过在其它方面,例如更新,就慢得多。要特别注意的是,LDAP通常作为一个hierarchal数据库使用,而不是一个关系数据库。因此,它的结构用树来表示比用表格好。正因为这样,就不能用SQL语句了。
LDAP中条目的组织一般按照地理位置和组织关系进行组织,非常的直观。LDAP把数据存放在文件中,为提高效率可以使用基于索引的文件数据库,而不是关系数据库
  简单说来,LDAP是一个得到关于人或者资源的集中、静态数据的快速方式。
 
什么时候该用LDAP存储数据?
LDAP对于存储下面这样的信息最为有用,也就是数据需要从不同的地点读取,但是不需要经常更新。例如,这些信息存储在LDAP目录中是十分有效的:
    * 公司员工的电话号码簿和组织结构图
    * 客户的联系信息
    * 计算机管理需要的信息,包括NIS映射、email假名,等等
    * 软件包的配置信息
    * 公用证书和安全密匙
 
LDAP目录树的最顶部就是根,也就是所谓的“基准DN”。
基准DN通常使用下面列出的三种格式之一
1)X.500格式表示的基准DN :o="monkey.com", c=de
2)用公司的Internet地址表示的基准DN:o=monkey.com.de
3)DNS域名的不同部分组成的基准DN,这也是现在最常用的格式:dc=monkey,dc=com,dc=de
 
专用名词解释:
DN=Distinguished Name 一个目录条目的名字
CN=Common Name 为用户名或服务器名,最长可以到80个字符,可以为中文;
OU=Organization Unit为组织单元,最多可以有四级,每级最长32个字符,可以为中文;
O=Organization 为组织名,可以364个字符长
C=Country为国家名,可选,为2个字符长
L=Location 地名,通常是城市的名称
ST 州或省的名称
O=Orgnization 组织名称
OU=Orgnizagion Unit 组织单位
STREET 街道地址
UID 用户标识

这里只是说说我对一些命令理解,如有错误请大家指教,毕竟网上也有很多教程。但是这些教程大多都要写写代码之类的,想起以前做程序员的经历就头痛,这里我来说用Excel 来辅助我们减轻工作量的办法。Excel是很有用的哦,以后会有文章来说说如何用它,帮助我们快速收集LAN网络资料。
 
那么我们先看看windows 2003自带的几个命令的用法。
1. csvde命令
C:\>csvde /?
未知选项
 
CSV 目录交换
 
常规参数
==================
-i              打开导入模式(默认为导出)
-f filename     输入或输出文件名
-s servername   要绑定到的服务器(默认为计算机域的 DC)
-v              打开详细模式
-c FromDN ToDN  发生的从 FromDN ToDN 的取代
-j path         日志文件的位置
-t port         端口号 (默认为 389)
-u              使用 Unicode 格式
-?              帮助
 
 
导出特有的参数
===============
-d RootDN       LDAP 查找的根(默认为名称上下文)
-r Filter       LDAP 查找过滤器 (默认为 "(objectClass=*)")
-p SearchScope  Search 作用域 (Base/OneLevel/Subtree)
-l list         LDAP 查找的属性
                列表(以逗号分隔)
-o list         要从输入中忽略的属性列表(以逗号分隔)
-g              禁用页查找。
-m              导出时启用 SAM 逻辑。
-n              不导出二进制值。
 
 
导入
======
-k              导入将继续忽略‘约束冲突’和
                ‘对象已存在’错误。
 
 
凭据确立
=========================
注意如果没有指定凭据,CSVDE 将绑定为当前
登录的用户,使用 SSPI
 
-a UserDN [Password | *]              简单身份验证
-b UserName Domain [Password | *]     SSPI 绑定方法
 
示例: 简单导入当前域
    csvde -i -f INPUT.CSV
 
示例: 简单导出当前域
    csvde -f OUTPUT.CSV
 
示例: 用凭据导出特定域
    csvde -m -f OUTPUT.CSV
          -b USERNAME DOMAINNAME *
          -s SERVERNAME
          -d "cn=users,DC=DOMAINNAME,DC=Microsoft,DC=Com"
          -r "(objectClass=user)"
没有写入日志文件。要生成日志文件,请
通过 -j 选项来指定日志文件路径。
以上是我们导入、导出数据。导出数据的CSV的格式,我们用excel打开后,可以看到AD数据,其实根据此表来创建我们的导入数据是比较简单的。
这里我只说方案并对参数做出说明,网上已有相关教程。
 
objectClassobjectClass 属性指定要创建的对象的类型。
DN(辨别名)。此属性指定新用户对象的辨别名。
displayNamedisplayName 属性包含对象出现在全球通讯簿以及它所属的任何其他地址列表中时显示的名称。
sAMAccountName。此属性映射到用户界面中的 Windows 2000 以前版本的登录名,并且通常与用户登录名相同。
userAccountControl。将此属性的值设置为 512
 
使用csvde.exe导入,一个最重要的约定就是,一定要把DN值放在第一值,其他的属性值,就没有严格的顺序关系
我们用excel来生成要导入的txt文件,CONCATENATE()这个函数是要利用的
2. dsmod命令
C:\>dsmod user /?
描述:       修改目录中现有的用户。
语法:       dsmod user <UserDN ...> [-upn <UPN>] [-fn <FirstName>]
            [-mi <Initial>] [-ln <LastName>] [-display <DisplayName>]
            [-empid <EmployeeID>] [-pwd {<Password> | *}]
            [-desc <Description>] [-office <Office>] [-tel <Phone#>]
            [-email <Email>] [-hometel <HomePhone#>] [-pager <Pager#>]
            [-mobile <CellPhone#>] [-fax <Fax#>] [-iptel <IPPhone#>]
            [-webpg <WebPage>] [-title <Title>] [-dept <Department>]
            [-company <Company>] [-mgr <Manager>] [-hmdir <HomeDir>]
            [-hmdrv <DriveLtr>:] [-profile <ProfilePath>]
            [-loscr <ScriptPath>] [-mustchpwd {yes | no}]
            [-canchpwd {yes | no}] [-reversiblepwd {yes | no}]
            [-pwdneverexpires {yes | no}]
            [-acctexpires <NumDays>] [-disabled {yes | no}]
            [{-s <Server> | -d <Domain>}] [-u <UserName>]
            [-p {<Password> | *}] [-c] [-q] [{-uc | -uco | -uci}]
参数:
                      描述
<UserDN ...>            需要项/stdin。要修改的一个或多个用户的可分辨名称
                        (DN)
                        如果目标对象被省略,会从标准输入 (stdin) 中获得来
                        支持以管道方式从另一个命令输出输入到该命令的输入。
-upn <UPN>              设置 UPN 值为 <UPN>
-fn <FirstName>         设置用户的名字为 <FirstName>
-mi <Initial>           设置用户的中间名首字母为 <Initial>
-ln <LastName>          设置用户的姓为 <LastName>
-display <DisplayName>  设置用户显示名为 <DisplayName>
-empid <EmployeeID>     设置用户雇员 ID <EmployeeID>
-pwd {<Password> | *}  将用户密码复位为 <Password>。如果是 *,会提示您输入密码。
-desc <Description>     设置用户的描述为 <Description>
-office <Office>        设置用户的办公室位置为 <Office>
-tel <Phone#>           设置用户的电话号码为 <Phone#>
-email <Email>          设置用户的电子邮件地址为 <Email>
-hometel <HomePhone#>   设置用户的家庭电话号码为 <HomePhone#>
-pager <Pager#>         设置用户的寻呼机号码为 <Pager#>
-mobile <CellPhone#>    设置用户的移动电话号码为 <CellPhone#>
-fax <Fax#>             设置用户的传真号码为 <Fax#>
-iptel <IPPhone#>       设置用户 IP 电话号码为 <IPPhone#>
-webpg <WebPage>        设置用户网页 URL <WebPage>
-title <Title>          设置用户的职务为 <Title>
-dept <Department>      设置用户的部门为 <Department>
-company <Company>      设置用户的公司信息为 <Company>
-mgr <Manager>          设置用户的经理为 <Manager>
-hmdir <HomeDir>     设置用户的主目录为 <HomeDir>。如果这是UNC 路径,被映射到这个路径的驱动器号必须通过 -hmdrv 指定。
-hmdrv <DriveLtr>:      设置用户主驱动器号为 <DriveLtr>:
-profile <ProfilePath>  设置用户配置文件路径为 <ProfilePath>
-loscr <ScriptPath>     设置用户登录脚本路径为 <ScriptPath>
-mustchpwd {yes | no}   设置用户在下次登录是 (yes) (no) 必须更改密码。
-canchpwd {yes | no}    设置用户是 (yes) (no) 能更改密码。如果-mustchpwd 的设置是“yes”,此设置应该是“yes”。
-reversiblepwd {yes | no}   设置是 (yes) (no) 使用可逆的加密保存用户密码。
-pwdneverexpires {yes | no}     设置用户密码是 (yes) (no) 从不过期。
-acctexpires <NumDays>  设置用户帐户从今天起 <NumDays> 天后过期。
                        一个 0 值表示帐户在今天结束时过期;
                        一个正数值设置在未来过期;
                        一个负数值设置在过去过期;
                        字符串值 "never" 表示此帐户从不过期。
-disabled {yes | no}    设置用户帐户是 (yes) (no) 禁用。
{-s <Server> | -d <Domain>}
                        -s <Server> <Server> 名连接到域控制器 (DC)
                        -d <Domain> 在域 <Domain> 连接到 DC
                        默认值: 在该登录域的一个 DC
-u <UserName>           <UserName> 连接。默认值: 已登录的用户。
                        用户名可以是: 用户名,域\用户名或
                        用户主体名称 (UPN)
-p <Password>           用户 <UserName> 的密码。如果是 *,会提示输入密码。
-c                      连续操作模式: 报告错误但继续用参数列表中的下一个
                        对象操作,若有多个目标对象列入表内的话。若无此选项,命令在出现第一个错误时退出。
-q                      安静模式: 不在标准输出显示任何输出。
{-uc | -uco | -uci}     -uc 指定从管道的输入或至管道输出用 Unicode 格式。
                        -uco 指定至管道或文件的输出用 Unicode 格式。
                        -uci 指定从管道或文件的输入用 Unicode 格式。
备注:
如果您提供的值包含空格,请在文字两边使用引号(例如,"CN=John SmithCN=UsersDC=microsoftDC=com")
如果您输入了多个值,这些值必须用空格隔开(例如,一个可分辨名称列表)
 
特殊令牌 $username$ (不区分大小写)可以用于将 SAM 帐户名放在-webpg, -profile, -hmdir, -email 参数的值。
例如,如果目标用户 DN CN=Jane DoeCN=usersCN=microsoftCN=comSAM 帐户名属性是"janed,"  -hmdir 参数能用以下替换值:
-hmdir \users\$username$\home
-hmdir 参数值被修改为以下值:
-hmdir \users\janed\home
示例:
重新设置用户密码:
    dsmod user "CN=John Doe,CN=Users,DC=microsoft,DC=com"
    -pwd A1b2C3d4 -mustchpwd yes
 
把多个用户密码重新设置到公用密码并强制他们在下次登录时更改密码:
    dsmod user "CN=John Doe,CN=Users,DC=microsoft,DC=com"
    "CN=Jane Doe,CN=Users,DC=microsoft,DC=com" -pwd A1b2C3d4 -mustchpwd yes
 
同时禁用多个用户帐户:
    dsmod user "CN=John Doe,CN=Users,DC=microsoft,DC=com"
    "CN=Jane Doe,CN=Users,DC=microsoft,DC=com" -disabled yes
 
$username$ 令牌把多个用户配置文件修改为公用路径:
dsmod user "CN=John Doe,CN=Users,DC=microsoft,DC=com"
"CN=Jane Doe,CN=Users,DC=microsoft,DC=com" -profile \users\$username$\profile
 
另外请参见:
dsmod computer /? - 修改目录中现有计算机的帮助。
dsmod contact /? - 修改目录中现有联系人的帮助。
dsmod group /? - 修改目录中现有组的帮助。
dsmod ou /? - 修改目录中现有组织单位的帮助。
dsmod server /? - 修改目录中现有域控制器的帮助。
dsmod user /? - 修改目录中现有用户的帮助。
dsmod quota /? - 修改目录中现有配额规定的帮助。
dsmod partition /? - 修改目录中现有分区的帮助。
 
目录服务命令行工具帮助:
dsadd /? - 添加对象的帮助。
dsget /? - 显示对象的帮助。
dsmod /? - 修改对象的帮助。
dsmove /? - 移动对象的帮助。
dsquery /? - 查找与搜索标准匹配的对象的帮助。
dsrm /? - 删除对象的帮助。
 
dsmod 失败:参数不正确。
请键入 dsmod /? 以查看帮助。
Ok!!我们要用的2个关键命令已经介绍了哈。
这里只是说哈此参数对OWA访问的影响:
不强制他们在下次登录时更改密码,否则可能无法登录OWA:
   dsmod user "CN=李明,OU=mail,DC=lison,DC=com", -pwd 12345766 -mustchpwd no
 
在实际应用中,我们完全可以通过拼音转换软件,转换出从人力资源部拿到记录,然后批量生成用户。