DirectoryServices过滤器和方法

时间:2011-09-29 13:01:02

标签: powershell active-directory windows-server-2008-r2

我正在尝试从AD获取OU / DC中所有用户的列表。

这就是我提出的:

$erroractionpreference = "SilentlyContinue"
function Get-GroupMembers {
    $filter = "(&(objectCategory=person)(objectClass=user))"
    $objSearcher = New-Object System.DirectoryServices.DirectorySearcher
    $objSearcher.Filter = $filter
    $colResults = $objSearcher.FindAll()

        foreach ($member in $colResults) { 
            $member
        }
}
get-GroupMembers 

如果我将过滤器更改为

    $filter = "(&(objectCategory=person)(objectClass=user)("OU=Admin Accounts,DC=admin"))

什么都没有回来。这是为什么? 我还想显示某些值(如果帐户处于活动状态或已禁用等),但如果我将$member传递给gm,我什么也得不到。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:4)

如果要搜索特定的OU,可以将其设置为搜索者对象的根目录:

$objOU = New-Object System.DirectoryServices.DirectoryEntry("LDAP://OU=Admin Accounts,DC=admin")
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.SearchRoot = $objOU

您还可以控制搜索范围。以下是两个最相关的选项:

# Option 1: Return only users in the 'Admin Accounts' OU
$objSearcher.SearchScope = "OneLevel"

# Option 2: Return users in the 'Admin Accounts' OU or any level beneath it
$objSearcher.SearchScope = "SubTree"

除非您覆盖搜索根和范围,否则您将获得针对当前域的根目录执行SubTree搜索的默认设置。您可以在此TechNet文章中找到更多详细信息:

编辑:正如uSlackr所说,你的DC组件确实看起来很可疑。我把它保留原样作为我的例子,但是不管你使用哪种方法,不完整/格式错误的基础对象名称都会破坏你的搜索。

答案 1 :(得分:4)

直流分量不完整。看起来应该是这样的:

 $filter = "(&(objectCategory=person)(objectClass=user)("OU=Admin Accounts,DC=myco,dc=com"))

但是dc = admin,dc = com应该从这个例子中的AD域名转换为“admin.com”,这似乎不正确

使用Microsoft AD cmdlet可以轻松实现这一点。

get-aduser -filter * -searchbase "ou=test,dc=mycom,dc=com"

有关下载和使用cmdlet的信息,请参见TechNet

答案 2 :(得分:1)

您可以尝试使用Quest ActiveRolesManagement Shell for ActiveDirectory从这里下载:

http://www.quest.com/downloads/

该软件包是免费软件,是PowerShell中用于Active Directory管理的更准确的cmdlet。