Поиск по каталогу не возвращает все результаты - PullRequest
1 голос
/ 29 мая 2020

Я создал 2400 групп безопасности и добавил все эти группы безопасности пользователю. Когда я запрашиваю Active Directory с помощью DirectorySearcher, я получаю только 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 Ответ

1 голос
/ 29 мая 2020

PageSize влияет только на количество результатов поиска, но есть только один результат поиска. Вы подсчитываете количество записей в атрибуте tokenGroups этого одного результата.

Одна из возможных проблем заключается в том, что tokenGroups будет отображать только группы безопасности, поскольку он предназначен для определения разрешений пользователя. Если пользователь входит в какие-либо группы, где «Тип группы» - «распространение», они не будут включены в tokenGroups.

Если у вас есть только один домен в вашем лесу AD, вы можете посмотреть атрибут memberOf вместо tokenGroups. Если в вашем лесу более одного домена, то memberOf может не дать вам все группы .

Вы также можете изменить поиск, чтобы он искал все группы, в которых есть этот пользователь в качестве члена. Это будет выглядеть так:

$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.

...