我正在尝试从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
,我什么也得不到。
非常感谢任何帮助。
答案 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。