批量根据计算机名称移动到相应ou

目的:根据定制化的计算机名,将其定期移动到指定的OU中,方便管理.

  • 先导出目前AD里的所有计算机.

csvde-dcn=computers,dc=h,dc=com-lcn-r"(objectClass=computer)"-fpclist.csvFOR/F"skip=1eol=;tokens=2,3*delims=,="%%ain(pclist.csv)doecho%%a>>pclist2.csv

上述语句若需要在命令行下单独执行,请去掉一个百分号.其中根据你AD实际替换DC值.在这个例子里使用了"CSVDE"导出所有计算机到一个CSV文件里,然后用FOR语句筛选有用的信息重新输出到另一个文件.在这里CSVDE可以用dsquery命令去执行,功能更强大.

  • 筛选计算机名的有效值.


findstr/CCpclist2.csv>>c.csv
findstr/BMpclist2.csv>>m.csv
findstr/BSalespclist2.csv>>Sales.csv

在这里根据计算名里的字段导出几个列表.

  • 用DSMOVE批量移动计算机到指定的OU.


FOR/F"eol=;tokens=1,2,3*delims="%%ain(c.csv)dodsmovecn=%%a,cn=computers,dc=h,dc=com-newparentou=c,ou=company,dc=h,dc=com
FOR/F"eol=;tokens=1,2,3*delims="%%ain(m.csv)dodsmovecn=%%a,cn=computers,dc=h,dc=com-newparentou=m,ou=company,dc=h,dc=com
FOR/F"eol=;tokens=1,2,3*delims="%%ain(Sales.csv)dodsmovecn=%%a,cn=computers,dc=h,dc=com-newparentou=sales,ou=company,dc=h,dc=com


这里就是根据从导出来的列表移动到相应的OU.

可以整理成一个bat执行:


csvde-dcn=computers,dc=h,dc=com-lcn-r"(objectClass=computer)"-fpclist.csv
FOR/F"skip=1eol=;tokens=2,3*delims=,="%%ain(pclist.csv)doecho%%a>>pclist2.csv

findstr/CCN-Apclist2.csv>>cw.csv
findstr/BCN-Lpclist2.csv>>cl.csv
findstr/BUS-Apclist2.csv>>uw.csv
findstr/BUS-Lpclist2.csv>>ul.csv

FOR/F"eol=;tokens=1,2,3*delims="%%ain(cw.csv)dodsmovecn=%%a,cn=computers,dc=h,dc=com-newparentou=Workstation,ou=China,ou=company,dc=h,dc=com
FOR/F"eol=;tokens=1,2,3*delims="%%ain(cl.csv)dodsmovecn=%%a,cn=computers,dc=h,dc=com-newparentou=Laptop,ou=China,ou=company,dc=h,dc=com
FOR/F"eol=;tokens=1,2,3*delims="%%ain(uw.csv)dodsmovecn=%%a,cn=computers,dc=h,dc=com-newparentou=Workstation,ou=US,ou=company,dc=h,dc=com
FOR/F"eol=;tokens=1,2,3*delims="%%ain(ul.csv)dodsmovecn=%%a,cn=computers,dc=h,dc=com-newparentou=Laptop,ou=US,ou=company,dc=h,dc=com


ifexist*.csvdel*.csv


最后的效果是:所有以CN-A开头的PC都移动到CHINA里的WORKSTATION里.CN-L就移动到CHINA里的LAPTOP.这样可以有效的分开管理.

100415111343.jpg
用DSQUERY查询并输出文件:


dsquerycomputer-ordncn=computers,dc=h,dc=com>>pclist2.csv

findstrCN-Apclist2.csv>>cw.csv
findstrCN-Lpclist2.csv>>cl.csv
findstrUS-Apclist2.csv>>uw.csv
findstrUS-Lpclist2.csv>>ul.csv

FOR/F"eol=;tokens=1,2,3*delims="%%ain(cw.csv)dodsmovecn=%%a,cn=computers,dc=h,dc=com-newparentou=Workstation,ou=China,ou=company,dc=h,dc=com
FOR/F"eol=;tokens=1,2,3*delims="%%ain(cl.csv)dodsmovecn=%%a,cn=computers,dc=h,dc=com-newparentou=Laptop,ou=China,ou=company,dc=h,dc=com
FOR/F"eol=;tokens=1,2,3*delims="%%ain(uw.csv)dodsmovecn=%%a,cn=computers,dc=h,dc=com-newparentou=Workstation,ou=US,ou=company,dc=h,dc=com
FOR/F"eol=;tokens=1,2,3*delims="%%ain(ul.csv)dodsmovecn=%%a,cn=computers,dc=h,dc=com-newparentou=Laptop,ou=US,ou=company,dc=h,dc=com


ifexist*.csvdel*.csv

转载自:http://blog.chinaunix.net/uid-8303972-id-2033116.html

*******************************************************************************************************

批量移动计算机到指定OU

脚本如下:

For/F“tokens=1,2,3″%%ain(computerList.txt)dodsquerycomputer-name%%a|dsmove-newparentou=&&c,OU=%%b,DC=zouserver,DC=local

这是一个for…do循环,循环次数为computerlist.txt中的行数,for每次循环读取computerlist.txt中的一行。执行的主体是:首先查询名称为%%a的计算机,然后将其移动到指定的OU.

Computerlist中的内容格式为――computerA大部门B小部门C.。

Tokens=1,2,3表示读取computerlist.txt中的前几个变量,这里表示读取前三个变量,变量分别读取到%%a,%%b,%%c以此类推。

Dsquerycomputer�Cname%%a查询计算机名为%%a的计算机,并用LDAP://cn=computerA,ou=computers,DC=zouserver,DC=local的格式表示(在运行的时候不会显示出来)。

dsmove-newparentou=%%b,OU=computers,DC=zouserver,DC=local表示把如上的查询到计算机computerA移动到该OU下。

需要注意的是,

  1. 1.注意computerlist.txt中的第二个及以后的变量%%b,%%c和LADP层次结构的对应关系。如:

如果在computerlist中的内容形式为:

computerA大部门B小部门C更小部门D

则:LADP://cn=computerA,ou=更小部门D,ou=部门C,ou=部门Bdc=zouserver,dc=local.(由小到大排列)

脚本的表示则为:ou=%%d,ou=%%c,ou=%%b,dc=zouserver,dc=local(由小到大排列,与computerlist中部门的排列顺序相反)

变量与部门对应关系对应关系

computerA

大部门B

小部门C

更小部门D

%%a

%%b

%%c

%%d

  1. 2.我们需要在执行脚本前,建立相关的OU及层次,不然会报错,不过报错不会影响后面循环的运行,脚本的循环语句会运行到computerlist中的最后一行。

  2. 3.部门层级数(OU层次结构)相同的计算机才能使用该脚本批量移动,不同的部门层次结构需修改脚本中的变量的个数,一旦相关变量个数与OU层次数目不相同,则针对该“计算机”执行就会报错,然后跳过该次执行。

  3. 4.由于本脚本查询是针对域的全局查询(dsquery时没定义查询范围),这次每次执行脚本时,可以查找出域中所有计算机,避免了遗落,但是如果在需要移动的计算机数量较少的时候,由于也是先全局查询,这样会影响效率,所以在少量移动且知道源计算机的具体ou的时候,建议指定具体OU。那么脚本如下(粗字体部分即为需要添加的内容):

For/F“tokens=1,2,3″%%ain(computerList.txt)dodsquerycomputerou=test,dc=zouserver,dc=local-name%%a|dsmove-newparentou=%%c,OU=%%b,DC=zouserver,DC=local

转载自:http://hebe852.blog.163.com/blog/static/120726248201281933918801/

你可能感兴趣的:(根据计算机名称,移动到相应ou)