码迷,mamicode.com
首页 > 系统相关 > 详细

Powershell检查AD对象是否存在

时间:2015-06-18 20:14:20      阅读:284      评论:0      收藏:0      [点我收藏+]

标签:powershell ad 活动目录 对象

 

在Powershell(PS)脚本或.Net活动目录编程时经常需要检查一个AD对象是否存在,但无论是PS的AD模块还是到目前的版本的Framework尚未提供一个直接的方法。本文根据近几年写AD脚本的经验,总结如下:

 

  1.  第一种方法是用调用ADSI静态方法Exists(),其使用的查询可以是上个世纪的WinNT provider也可以是LDAP,使用语法如下:
    [ADSI]::Exists("WinNT://DomainName/SamAccountName");
    [ADSI]::Exists("LDAP:// DistinguishedName")
    用WinNT优点是可以不必关心对象的位置,因为NT时代域是没有层次的扁平结构,使用时键盘输入少。但两种ADSI方法都有一个缺点,当查询对象存在时返回True,不存在时会返回COMException。需要False时得用try…catch结构来捕捉。

     

  2. 第二种方法是用dsquery命令,这可能是系统管理员觉得比较亲切的方法,这种方法需要使用对象的类型来查询,如user,group,… 在PS 3.0以上是我喜欢用(dsquery user -samid SamAccountName).count来判断存在与否,返回值1刚好表示存在,0表示不存在。

     

  3. 第三种方法实际是程序员使用的DirectoryServices.DirectorySearcher类的FindOne()方法,查询是标准的LDAP查询,其PS实现类似于下面:

    ([adsisearcher]‘(&(objectClass=group)(samaccountname=GroupName))‘).FindOne()
    在PS 3.0以上可以和上面一样,用数组的Count属性1,0判断存在与否。

     

上面总结了笔者使用过的几种方法,不知道看客是不是还有更好的方法,欢迎留言!

本文出自 “PowerSheller剥壳” 博客,请务必保留此出处http://powersheller.blog.51cto.com/4428055/1663160

Powershell检查AD对象是否存在

标签:powershell ad 活动目录 对象

原文地址:http://powersheller.blog.51cto.com/4428055/1663160

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!