Chinaunix首页 | 论坛 | 博客
  • 博客访问: 408730
  • 博文数量: 87
  • 博客积分: 6015
  • 博客等级: 准将
  • 技术积分: 960
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-13 16:59
文章分类
文章存档

2015年(4)

2010年(16)

2009年(13)

2008年(12)

2007年(29)

2006年(13)

我的朋友

分类: WINDOWS

2010-04-15 10:50:16

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

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

csvde -d cn=computers,dc=h,dc=com -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=h,dc=com -newparent ou=c,ou=company,dc=h,dc=com
FOR /F "eol=; tokens=1,2,3* delims= " %%a in (m.csv) do dsmove cn=%%a,cn=computers,dc=h,dc=com -newparent ou=m,ou=company,dc=h,dc=com
FOR /F "eol=; tokens=1,2,3* delims= " %%a in (Sales.csv) do dsmove cn=%%a,cn=computers,dc=h,dc=com -newparent ou=sales,ou=company,dc=h,dc=com


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

可以整理成一个bat执行:

 


csvde -d cn=computers,dc=h,dc=com -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

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 /F "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 /F "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 /F "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 /F "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 /F "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 /F "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 /F "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 /F "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


阅读(3216) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-04-15 14:48:18

dsquery computer cn=computers,dc=h,dc=com 查询出所有的计算机,不包含dc.

chinaunix网友2010-04-15 11:19:31

C:\Users\Administrator>dsquery /? 描述: 该工具的命令集允许您根据指定的标准查询目录。 除 dsquery * 之外 (dsquery * 可以查询任何类型的对象), 以下每一个 dsquery 命令均可查找一个特定对象类型: dsquery computer - 查找目录中的计算机。 dsquery contact - 查找目录中的联系人。 dsquery subnet - 查找目录中的子网。 dsquery group - 查找目录中的组。 dsquery ou - 查找目录中的组织单位。 dsquery site - 查找目录中的站点。 dsquery server - 查找目录中的 AD DC/LDS 实例。 dsquery user - 查找目录中的用户。 dsquery quota - 查找目录中的配额规定。 dsquery partition - 查找目录中的分区。 dsquery * - 用通用的 LDAP 查询来查找目录中的任何对象。 若要查找特定命令的帮助,请键入 "dsquery