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


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

csvde -d cn=computers,dc=contoso,dc=intra -l cn -r "(objectClass=computer)" -f pclist.csv FOR /F "skip=1 eol=; tokens=2,3* delims=,=" %%a in (pclist.csv) do echo %%a >>pclist2.csv

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


  • 筛选计算机名的有效值

findstr /C C pclist2.csv >>c.csv
findstr /B M pclist2.csv >>m.csv
findstr /B Sales pclist2.csv >>Sales.csv

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



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

FOR /F "eol=; tokens=1,2,3* delims= " %%a in (c.csv) do dsmove cn=%%a,cn=computers,dc=contoso,dc=intra -newparent ou=c,ou=company,dc=contoso,dc=intra
FOR /F "eol=; tokens=1,2,3* delims= " %%a in (m.csv) do dsmove cn=%%a,cn=computers,dc=contoso,dc=intra -newparent ou=m,ou=company,dc=contoso,dc=intra
FOR /F "eol=; tokens=1,2,3* delims= " %%a in (Sales.csv) do dsmove cn=%%a,cn=computers,dc=contoso,dc=intra -newparent ou=sales,ou=company,dc=contoso,dc=intra
这里就是根据从导出来的列表移动到相应的OU.


  • 可以整理成一个bat执行:

csvde -d cn=computers,dc=h,dc=com -l cn -"(objectClass=computer)" -f pclist.csv
FOR /"skip=1 eol=; tokens=2,3* delims=,=" %%a in (pclist.csv) do echo %%>>pclist2.csv

findstr /C CN-A pclist2.csv >>cw.csv
findstr /B CN-L pclist2.csv >>cl.csv
findstr /B US-A pclist2.csv >>uw.csv
findstr /B US-L pclist2.csv >>ul.csv

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


if exist *.csv del *.csv

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


  • 用DSQUERY查询并输出文件:

dsquery computer -o rdn cn=computers,dc=h,dc=com >>pclist2.csv 

findstr CN-A pclist2.csv >>cw.csv
findstr CN-L pclist2.csv >>cl.csv
findstr US-A pclist2.csv >>uw.csv
findstr US-L pclist2.csv >>ul.csv

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


if exist *.csv del *.csv