10个例子解释如何用命令行管理AD(查询篇)
【本文乃原创,如有任何个人博客,商业网站或者媒体需要转载请与本人联系。经过许可后才能转发。
本人邮件delxu★msn.com】
【本文同时发表于本人live space: http://delxu.spaces.live.com/blog/cns!D04F87F9ED029F69!2327.entry,相同版权信息不再重复】
本人邮件delxu★msn.com】
【本文同时发表于本人live space: http://delxu.spaces.live.com/blog/cns!D04F87F9ED029F69!2327.entry,相同版权信息不再重复】
提示:本文提到的命令行在XP下必须安装Admin pack才会有。在Win7/Vista下要安装RSAT(Remote Server Administration Tools)
dsquery是一个好命令。它可以用来查询AD中各种对象。dsquery如果没查询到任何结果,将返回一个空行,没有报错信息。用法举例如下:
例1 根据用户名查用户帐号
C:\WINDOWS>dsquery user -name gp*
"CN=gp01,OU=staff,DC=domain,DC=com"
"CN=gp02,OU=staff,DC=domain,DC=com"
这里的user就是指查用户帐号,也可以换成Computer来查计算机帐号,换成group来查组,或者换成server来查域控制器;-name参数是指根据用户名来查,*是通配符;
这条命令的意思就是查询用户名以gp开头的所有用户帐号,并且返回其DN
解释:DN,Distinguished Name,可辨识名称,是包含了全路径的AD对象名称。格式如下 CN=david,OU=staff,DC=domain,DC=com 这个DN说明的是一个叫david的对象,它位于domain.com域下的一个叫staff的OU中 |
例2 根据帐号描述(description)来查用户帐号
我们公司会将用户的工号放在用户描述中,常常需要通过工号来查用户帐号。可以用命令:
C:\WINDOWS>dsquery user -desc *00527*
"CN=david,OU=staff,DC=domain,DC=com"
"CN=david,OU=staff,DC=domain,DC=com"
这里就是查询description中含有00527的用户帐号DN,通配符*放在00527的前后各一个,说明只要中间含有00527即满足条件。
例3 根据状态查计算机帐号(不再激活n周的计算机帐号)
C:\WINDOWS>dsquery computer -inactive 7
"CN=computer01,OU=workstations,DC=domain,DC=com"
"CN=computer01,OU=workstations,DC=domain,DC=com"
-inactive 后面的7说明7周
例4 根据禁用状态查用户帐号
C:\WINDOWS>dsquery user -disabled
"CN=gp01,OU=staff,DC=domain,DC=com"
"CN=gp02,OU=staff,DC=domain,DC=com"
"CN=david,OU=staff,DC=domain,DC=com"
"CN=gp01,OU=staff,DC=domain,DC=com"
"CN=gp02,OU=staff,DC=domain,DC=com"
"CN=david,OU=staff,DC=domain,DC=com"
-disabled 参数用来查被禁用的用户帐号
例5 查指定域下被禁用的帐号中名字中含有gp的
C:\WINDOWS>dsquery user -disabled -name gp* -d domain.com
"CN=gp01,OU=staff,DC=domain,DC=com"
"CN=gp02,OU=staff,DC=domain,DC=com"
"CN=gp01,OU=staff,DC=domain,DC=com"
"CN=gp02,OU=staff,DC=domain,DC=com"
-d 后面跟指定的域名
讲到这里大家有没有注意到,虽然dsquery是一个好命令,但是单独使用的时候返回的结果看起来很晕。因为返回的结果都是以DN形式存在的。
要想看的更加清楚,怎么办?比如我想返回的结果包括一个简单的用户帐号名和该帐号的描述。
dsget命令闪亮登场。
dsget命令可以用来查某个对象的具体属性。通常我们可以用管道符号将dsquery的结果传递给dsget。如果dsquery没查询到结果,那么就没有参数可以传递给dsget,dsget将会返回一次报错信息。
例6 返回某个用户的用户帐号名和描述(查名字中含有gp的用户)
C:\WINDOWS>dsquery user -name gp* | dsget user -samid -desc
desc samid
Group Policy Test account gp01
Group Policy Test account no.2 gp02
dsget succeeded
这里的samid就是Windows下的传统用户名。desc列下的就是描述
例7 作为例6的进一步,我们加上一个参数,用来列出帐号是否被禁用
C:\WINDOWS>dsquery user -name gp* | dsget user -samid -desc -disabled
desc samid disabled
Group Policy Test account gp01 yes
Group Policy Test account no.2 gp02 yes
dsget succeeded
-disabled列出是否禁用的状态,yes表示该帐号已经被禁用,no表示未禁用。
例8 查某个用户组(查名字中含有cap字符串的所有Group)
C:\WINDOWS>dsquery group -name *cap* -d domain.com | dsget group -samid -secgrp -scope
samid scope secgrp
WG_CAP universal yes
DCApps global yes
dsget succeeded
-secgrp 判断是否security group,若No则为Distribution Group
-scope显示是Domain Local组,Global组或者universal组
-samid显示组名
-scope显示是Domain Local组,Global组或者universal组
-samid显示组名
例9 查域中的域控制器中哪台是GC(Global Catagory)服务器
C:\WINDOWS>dsquery server -d domain.com | dsget server -dnsname -isgc
dnsname isgc
CNDC01.domain.com yes
CNDC02.domain.com no
dsget succeeded
最后,列一条很有用的命令
例10 查FSMO角色服务器
netdom query fsmo /d:[domainname]
C:\WINDOWS>netdom query fsmo /d:domain.com
Schema owner CNDC01.domain.com
Domain role owner CNDC01.domain.com
PDC role CNDC01.domain.com
RID pool manager CNDC01.domain.com
Infrastructure owner CNDC02.domain.com
The command completed successfully.
Schema owner CNDC01.domain.com
Domain role owner CNDC01.domain.com
PDC role CNDC01.domain.com
RID pool manager CNDC01.domain.com
Infrastructure owner CNDC02.domain.com
The command completed successfully.