目录搜索器未返回所有结果

时间:2020-05-29 16:42:26

标签: powershell active-directory azure-active-directory domaincontroller

我创建了2400个安全组并将所有这些安全组添加到用户。使用DirectorySearcher查询Active Directory时,仅获得2049个安全组。其余的安全组丢失。我尝试了如下所述的分页方法,但仍然不起作用。获取所有安全组的理想方法是什么?

$gcName = "blahblah.com"
$dn =  "CN=blahblah,OU=Tenants,OU=INT,DC=dom,DC=abc,DC=def,DC=com"
$searchRoot = [ADSI]("LDAP://" + $gcName + "/" + $dn)
$searcher = New-Object System.DirectoryServices.DirectorySearcher($searchRoot, "(objectClass=*)", @("tokenGroups"), [System.DirectoryServices.SearchScope]::Base)
$searcher.PageSize=500
foreach ($SearchResult  in $searcher.FindAll()){$SearchResult.Properties["tokenGroups"].Count}      

编辑1: 当我使用以下命令时,它不会返回安全组的完整列表。理想情况下,我希望这里的所有组以及其他一些用户属性。

$searchRoot = [ADSI]("LDAP://" + $gcName)
$searcher = New-Object System.DirectoryServices.DirectorySearcher($searchRoot, "(|((msOnline-WindowsLiveNetId=xxxxxx))((msOnline-AlternativeSecurityId=YYYYYYYY)))", @("name"))
$searcher.PropertiesToLoad.AddRange(@("msOnline-UserPrincipalName","objectClass","msOnline-AccountEnabled","displayName","proxyaddresses","memberOf"))
$sr = $searcher.FindOne()
$de= $sr.GetDirectoryEntry()
$de.RefreshCache(@("tokenGroups"))
$de.Properties["tokenGroups"].Count

当我使用以下命令时,它将返回所有组,但是我没有获得用户属性。

$searchRoot = [ADSI]("LDAP://" + $gcName)
$searcher = [adsisearcher]::new($searchRoot, "(&(objectClass=group)(member=$dn))", @("name"))
$searcher.PageSize=500
$searcher.FindAll().Count

这也不起作用。

$searchRoot = [ADSI]("LDAP://" + $gcName)
$searcher = [adsisearcher]::new($searchRoot, "((member=$dn))", @("name","msOnline-UserPrincipalName","tokenGroups"))
$searcher.PageSize=500
$searcher.FindAll().Count

我要实现的是通过一次搜索获得所有tokenGroups和少数用户属性。

1 个答案:

答案 0 :(得分:1)

PageSize仅影响搜索结果的数量,但是只有一个搜索结果。您正在计算该结果的tokenGroups属性中的记录数。

一个可能的问题是tokenGroups仅显示安全组,因为它是用来确定用户权限的。如果用户位于“组类型”为“分布”的任何组中,则这些组将不会包含在tokenGroups中。

如果在AD林中只有一个域,则可以查看memberOf属性,而不是tokenGroups。如果您的林中有多个域,请memberOf may not give you all the groups

您还可以更改搜索,以查找具有该用户作为成员的所有组。看起来像这样:

$gcName = "blahblah.com"
$dn =  "CN=blahblah,OU=Tenants,OU=INT,DC=dom,DC=abc,DC=def,DC=com"
$searchRoot = [ADSI]("LDAP://" + $gcName)
$searcher = [adsisearcher]::new($searchRoot, "(&(objectClass=group)(member=$dn))", @("name"))
$searcher.PageSize=500
$searcher.FindAll().Count

请注意,您可以将[adsisearcher]::new用作New-Object System.DirectoryServices.DirectorySearcher的缩写。