2024年4月27日发(作者:)
AD用户、组织单元的导入和导出
AD用户的导入和导出工具有很多种,这里只解释微软官方提供的工具
第三方工具,通过API、ADSI二次开发的工具不在讨论之列。在下接触AD 不就,文中难
免疏漏,还请各位指正,先行谢过。
入门演示
在c:下面保存此文件为 路径和文件名可以使用其它
注意别留多余的空格自找麻烦
其实也就是这样一个表
DN objectC
ss
"CN=test1111,OU=test,DC=bjtest,DC=
OM"
"CN=test2222,OU=test,DC=bjtest,DC=
OM"
"CN=test33333,OU=test,DC=bjtest,DC=
OM"
用逗号分割的形式写,最后一项后面不写逗号
然后再命令行下输入下面指令
第一条type 是为了显示文本中的内容
第二条是用来导入用户的命令
user test33333
user test2222
user
sAMAccountN
me
test1111
用户已经导入了,但用户是禁用的。如果要该用户能登陆域要把用户启用。
DN objectClass sAMAccountName
这三个属性是必须的,也是最少的导入属性。
大批量导入用户
这样导入只是为了有个初步的认识,下面介绍一些实际操作中的问题。
比如一个测试AD,为了模拟生产AD的环境,需要把用户和组织单元全部导入,事实上我
遇到了一个上百个组织单元,接近7000个用户信息的导入操作,涉及真实信息需要保密,
此处只还是做一个模拟的例子。
既然需要导入这么多用户,肯定要有相应的信息了,于是我得到了两个csv文件。
一个是组织单元的导出文件,一个是用户的导出文件。
文件的内容不便透露,这里还是模拟一下。
下面再test下面建几个组织单元(OU),如图。
然后建几个用户分别放进对应的ou里,格式从前向后依次是最小的ou,如下格式
DN obje
Clas
"CN=testAA,OU=test11,OU=test1,OU=test,D
=bjtest,DC=com"
"CN=testbb,OU=test12,OU=test1,OU=test,DC
bjtest,DC=com"
"CN=testcc,OU=test2,OU=test,DC=bjtest,DC
om"
文本内容这样写
DN,objectClass,sAMAccountName
"CN=testAA,OU=test11,OU=test1,OU=test,DC=bjtest,DC=com",user,testAA
"CN=testbb,OU=test12,OU=test1,OU=test,DC=bjtest,DC=com",user,testbb
"CN=testcc,OU=test2,OU=test,DC=bjtest,DC=com",user,testcc
user test33333
user test2222
user
sAMAccou
Name
test1111
用户已经导入,注意这种最简的导入方式用户默认是禁用的,并且是没有密码的,后面将讲
解怎么批量添加密码。
如果希望导入用户是启用状态的,请使用userAccountControl,将其值设定为512或66080
等值,具体数值的含义请参考/kb/305144
同样可以写入电话,Email,办公部门等等其他属性,关于批量修改特定属性将在后面介绍。
使用CSVDE导入的方法要求有两点
1 用户导入所使用的文本文件,格式必须严格符合。
2 放置导入用户的组织单元需要事先建立好,才能导入。
针对问题1,比如文本格式有误,会提示
可以使用命令
并会在指定路径输出一个错误日志,更多关于CSVDE的用法请参考微软的文档
/kb/327620/zh-cn
/en-us/library/cc772704(WS.10).aspx。
针对要点2下面介绍:
如何批量导入组织单元
在讲解导入之前,我们先了解下csvde的导出,之后就可以明白导入文本的写法。
在命令行下输入
C:>csvde -f -d "ou=test,dc=bjtest,dc=com" -r
"(&(objectcategory=person)(objectclass=user))" -l DN,objectClass,samaccountname -j c:
打开 文件
下面解释这个命令的含义
-d "ou=test,dc=bjtest,dc=com" 搜索下的ou为test下的内容
-r "(&(objectcategory=person)(objectclass=user))" 搜索objtectcategory属性为person并且
objtectclass=user的对象(&是“与”的意思)
-l DN,objectClass,samaccountname 是导出哪些属性
在讲解导入之前,我们先了解下csvde的导出,之后就可以明白导入文本的写法。
在命令行下输入
C:>csvde -f -d "ou=test,dc=bjtest,dc=com" -r
"(&(objectcategory=person)(objectclass=user))" -l DN,objectClass,samaccountname -j c:
把这个命令修改一下
C:>csvde -f -d "ou=test,dc=bjtest,dc=com" -r
"(&(objectcategory=OrganizationalUnit))" -l DN,objectClass,samaccountname -j c:
查看导出的文本文件
就只含有组织单元了。
这样,也就是按这个格式写入你的组织结构就可以了。但是编辑也是有技巧的,下面介绍两
个技巧,用到两个软件,一个是我们熟悉的office系列的Excel表格制作工具,一个是UtralEdit
用Excel编辑文本的技巧
使用Excel主要是用来编辑逗号分割的文件(*.csv),原因是我得到的那个逗号分割的文件
太大了.. 实际演示下就明白了。打开Excel
我的是2007,2003的一样操作。
右下角需选中csv,打开你的目标文件
此处选中逗号
如果文本识别符号选择无的话,可以把引号内的内容拆开,这样更容易编辑了。
具体编辑的技巧就是Excel的使用技巧了,不再多说,避免跑题太远。总之利用Excel可以
方便的编辑导出的文件。编辑的目的,我这次操作是更换域名,也就是批量的把DC=*,DC=*
替换成DC=bjtest,DC=com,还算方便。
用UtralEdit编辑文本的技巧
这部分待续,UE卸载掉了,关键词:列操作,替换
使用ldifde命令导入导出AD对象
LDIFDE的使用与CSVDE的操作相似,由于使用不多,了解更多信息请访问以下两个链接
了解。
/kb/237677/zh-cn
/china/technet/prodtechnol/windowsserver2003/technologies/directory/a
ctivedirectory/stepbystep/
简单对这个命令进行介绍
查看 LDIFDE 常规参数
单击开始,指向程序,指向 附件,然后单击“命令提示符”。
在命令提示符下,键入:ldifde ?。然后,屏幕上会显示内置的帮助文件,如下所示。
常规参数
-i 打开 Import 模式 (默认为 Export)
-f filename 输入或输出文件名
-s servername 要绑定到的服务器名称(默认为登录域的 DC)
-c FromDN ToDN 从 FromDN 到 ToDN 发生的取代
-v 打开 Verbose 模式
-j 日志文件的位置
-t 端口号(默认为 389)
-u 使用 Unicode 格式
-? 帮助
使用上面的
C:>csvde -f -d "ou=test,dc=bjtest,dc=com" -r
"(&(objectcategory=person)(objectclass=user))" -l DN,objectClass,samaccountname -j c:
把csvde换成ldifde可以得到下面的结果,可以看出只是导出的格式不同而以。
和CSVDE同样Ldifde也不能导入或导出密码。此处不更多介绍
既然不能导入导出密码,就要另外想办法。7000个用户逐个设置密码显然是不现实的。
于是需要使用另一个命令DSADD系列。
使用DSADD、DSMOD等操作AD对
象
直接在根目录键入dsadd可以看到命令的说明
输入dsadd user /?可以得到关于user的相关内容
内容太长,我把文本输出了
另请参阅:
dsadd computer /? - 将计算机添加到目录的帮助。
dsadd contact /? - 将联系人添加到目录的帮助。
dsadd group /? - 将组添加到目录的帮助。
dsadd ou /? - 将组织单位添加到目录的帮助。
dsadd user /? - 将用户添加到目录的帮助。
dsadd quota /? - 将配额添加的目录的帮助
目录服务命令行工具帮助:
dsadd /? - 添加对象的帮助。
dsget /? - 显示对象的帮助。
dsmod /? - 修改对象的帮助。
dsmove /? - 移动对象的帮助。
dsquery /? - 查找与搜索标准匹配对象的帮助。
dsrm /? - 删除对象的帮助。
描述: 把用户添加到目录。
语法: dsadd user
[-mi
[-empid
[-memberof
[-email
[-mobile
[-webpg
[-company
[-hmdrv
[-mustchpwd {yes | no}] [-canchpwd {yes | no}]
[-reversiblepwd {yes | no}] [-pwdneverexpires {yes | no}]
[-acctexpires
[{-s
[-p {
参数:
值 描述
被省略,将从标准输入(stdin)中读取。
-samid
dsadd 会使用
创建 SAM 帐户名。
-upn
-fn
-mi
-ln
-display
-empid
-pwd {
-desc
-memberof
-office
-tel
-email
-hometel
-pager
-mobile
-fax
-iptel
-webpg
-title
-dept
-company
-mgr
-hmdir
-hmdrv
-profile
-loscr
设置用户名为
设置用户中间名首字母为
设置用户姓为
设置用户显示名为
设置用户雇员 ID 为
设置用户密码为
密码。
设置用户描述为
把用户设置成一个或多个组成员
设置用户办公室位置为
设置用户电话号码为
设置用户电子邮件地址为
设置用户家庭电话号码为
设置用户寻呼机号码为
设置用户移动电话号码为
设置用户传真号码为
设置用户的 IP 电话号码为
设置用户的网页 URL 为
设置用户的职务为
设置用户的部门为
设置用户的公司信息为
设置用户的经理为
设置用户主目录为
将映射到此路径的驱动器号必须也要用 -hmdrv 指定。
设置用户主驱动器号为
设置用户的配置文件路径为
设置用户的登录脚本路径为
-mustchpwd {yes | no} 用户在下次登录时是否更改密码。默认值: no。
-canchpwd {yes | no} 用户是否可以更改密码。如果 -mustchpwd 是 "yes",
它应该是 "yes"。默认值: yes。
-reversiblepwd {yes | no}
是否使用可逆的加密保存密码。默认值: no。
-pwdneverexpires {yes | no}
用户密码是否永远不过期。默认值: no。
-acctexpires
意味着今天结束后帐户就过期; 正数值意味着帐户在未
来过期; 负数意味着该帐户已经过期并将过期日期设置
在过去; 字符串值 "never" 意味着该帐户永远不过期。
-disabled {yes | no} 用户帐户是否禁用。默认值: no。
{-s
-s
-d
默认值: 在登录域的 DC。
-u
可以是: 用户名,域用户名或用户主体名称(UPN)。
-p {
入密码。
-q 安静模式: 不在标准输出显示任何输出。
{-uc | -uco | -uci}
备注:
如果您在命令提示没有提供目标对象,会从标准输入(stdin)获取目标对象。可以
从键盘、重定向文件或从另一个命令的管道输出接受 Stdin 数据。要从键盘或在
重定向文件中标记 stdin 数据的结束,请使用 Control+Z 表示文件结束(EOF)。
如果您提供的值包含空格,请在文字两边使用引号(例如,"CN=John Smith,
CN=Users,DC=microsoft,DC=com")。如果您输入了多个值,这些值必须用空格隔开
(例如,一个可分辨名称列表)。
-uc 指定从管道的输入或至管道输出用 Unicode 格式。
-uco 指定至管道或文件的输出用 Unicode 格式。
-uci 指定从管道或文件的输入用 Unicode 格式。
特殊令牌 $username$ (不区分大小写)可以用来把 SAM 帐户名放在一个参数的值。
例如,如果目标用户 DN 是 CN=Jane Doe,CN=users,CN=microsoft,CN=com,
SAM 帐户名属性是 "janed",-hmdir 参数能有以下替换值:
-hmdir users$username$home
-hmdir 参数的值被修改为以下值:
-hmdir usersjanedhome
描述已经很详细了,比如我需要给用户test1111设置密码,则输入以下命令:
dsmod user "cn=test1111,ou=test,dc=bjtest,dc=com" -pwd 1111
含义就是修改 下 test组织单元内的test1111用户的密码为1111
成功。修改,新增,查询用户都可以这样操作。这个命令相比csvde的优点可以通过下面的
例子来体现:
比如我现在拿到一份名单
张三,电话12345
李四,电话23456
王五,电话34567
需要在AD中建立3个用户,写入电话,并把密码初始值设置为和自己电话一样的数值,注
意也就是每个人的密码还是不同的,并要写AD的名字和显示名(displayname 这个属性,
做过OCS的应该知道这个名字将会是OC用户的显示名),将3个用户放入test组织单元
中。
那么下面把文本修改成如下的内容,下面文本还是用逗号分割:
zhangsan,张三,12345
lisi,李四,23456
wangwu,王五,34567
可以运行下面命令
dsadd user "cn=zhangsan,ou=test,dc=bjtest,dc=com" -display 张三 -pwd 12345 -tel 12345
同样操作李四,王五,如果用户多了,可以用Excel编辑这个命令序列,存成.bat文件执行,
但还有其他的办法,更适合大量用户时进行操作。
文本内容如上面所示
输入下面命令(为了显示在一行内换了小字体,应用请复制)
for /f "tokens=1,2,3 delims=," %a in () do dsadd user "cn=%a,ou=test,dc=bjtest,dc=com" -pwd %c -tel %c -display %b
结果如图
下面将讲解的是
利用for循环语句实现批量操作
解释该命令
token=1,2,3 每行取第1,2,3
FOR语句是个标准的批处理命令
在命令行下运行FOR /?同样会得到很多信息,又耐心的可以逐页看
完
这里仅介绍配合DSADD的应用
FOR 配合文本文件使用可以这样理解
比如一个句子
我让()去学校,拿一本()书回来,送给()老师
而文本中,就是
张三,历史,李
李四,政治,何
王五,生物,张
于是就填出3个句子
我让(张三)去学校,拿一本(历史)书回来,送给(李)老师
我让(李四)去学校,拿一本(政治)书回来,送给(何)老师
我让(王五)去学校,拿一本(生物)书回来,送给(张)老师
写法记住一个固定的就行了,忘记了去google一下也很多。这里就根
据前面举的例子来讲解
for /f "tokens=1,2,3 delims=," %a in () do dsadd user "cn=%a,ou=test,d
c=bjtest,dc=com" -pwd %c -tel %c -display %b
tokens=1,2,3就是每行读取地1,2,3个值
delims=,就是认为逗号是分开每个值的标识
%a就是从a开始命名,第一个是%a,第二个值是%b,第三个值是%c
依次类推,最多就a-z 26个,好像也可以用%%a,依次类推。
括号内的就是对应读取的文本文件了,
do 后面就是要填入的“句型”了
也就是说,把文本的内容每行以逗号分开读取3个值
重复执行
dsadd user "cn=第一个值,ou=test,dc=bjtest,dc=com" -pwd 第三个值 -te
l第三个值-display第二值
恩,就这样,更多内容请自行搜索吧,不给链接了。可以搜索关键词:
for delims或者for /f
使用脚本添加某一特定属性
声明:此部分内容属于分享内容,代码为论坛网友ghjconan(如果记错了名字抱歉)
提供,在此再次表示感谢。
这里讲这个内容也是遇到一个实际情况,需要批量填写一批OCS的线
路URI,于是查到一个类似的脚本在开发人员指导下修改后操作成功。
下面分享这个案例,希望有所借鉴
需求是像域用户填写某个属性的内容,经查询这个属性的名称叫
msRTCSIP-Line
于是写了一个文本,内容大概如下
test1,tel:+861012345678
test2,tel:+861012345678
test3,tel:+861012345678
将上述内容保存为文本文件
将下面脚本保存成并和放在同一路径下,在DC上
运行。
Dim objInfo
Const ADS_SCOPE_SUBTREE = 2
Set fso = CreateObject("stemObject")
Set objFile = xtFile("")
Set objConnection = CreateObject("tion")
Set objCommand = CreateObject("d")
er = "ADsDSOObject"
"Active Directory Provider"
Set Connection = objConnection
ties("Page Size") = 1000
ties("Searchscope") = ADS_SCOPE_SUBTREE
Do
On Error Resume Next
objInfo = Split(ne,",")
strDN = FindUserDN(objInfo(0))
Set objUser = GetObject("LDAP://" & strDN)
"msRTCSIP-Line",objInfo(1)
o
If <> 0 Then
"Error:" & objInfo(0) & "," & objInfo(1)
End If
strDN = ""
Loop Until fStream = True
"Done!"
Function FindUserDN(strUserDisplayName)
dText = _
"SELECT distinguishedName FROM 'LDAP://OU=OCSuser,D
C=test,DC=com,DC=cn' WHERE objectCategory='user' " & _
"AND displayname = '" & strUserDisplayName & "'"
Set objRecordSet = e
rst
Do Until
arrDN = ("distinguishedName").Value
If IsArray(arrDN) = True Then
strUserDisplayName
FindUserDN = arrDN(0)
Else
FindUserDN = arrDN
End if
xt
Loop
If <> 0 Then
ption & ":" & strUserDisplayNam
e
End If
End Function
说明:
msRTCSIP-Line :是要修改的属性,即线路URI
LDAP://OU=OCSuser,DC=uc,DC=cdb,DC=com,DC=cn:是要查询用户的
AD路径
displayname :是判断用户的标识,也就是查询到displayname是test1
的用户,填写后面的值进入线路URL
:是导入的文件
此脚本须和 在同一路径下,双击此脚本保存的.vbs文件即
可.
也可以在命令行模式下输入 cscript
未提示错误,只提示done!就是修改成功了。
发布者:admin,转转请注明出处:http://www.yc00.com/web/1714203147a2401441.html
评论列表(0条)