1

该公司有一个 AD 结构,我需要搜索用户所属的组名。我知道应该在用户的“memberof”属性中,我们只是说这并不总是正确的。

我尝试使用以下代码在 OU 中的所有组的“成员”属性中查找用户名(或对象名),然后返回组的名称。不幸的是,我认为我遗漏了一些东西。反向搜索(即:列出组的成员)正在工作,但就我而言,我不知道组的名称。我还需要所有组,而不仅仅是一个组。

uname ="*anyoldusername*"

$Searcher = [ADSISearcher]"(member=$uname)"
$Searcher.SearchRoot = [ADSI] "LDAP://mydomainsearchroot"
$Searcher.PageSize = 10000
$result = $Searcher.FindAll().Properties.cn

echo $result
4

1 回答 1

2

这应该这样做:

$UserName ="TestUser"
$Searcher = [ADSISearcher]""
$Searcher.SearchRoot = [ADSI]"LDAP://mydomainsearchroot"
$Searcher.Filter = "Name=$UserName"
$UserDN = $Searcher.FindOne().properties.distinguishedname
$Searcher.Filter = "(member:1.2.840.113556.1.4.1941:=$UserDN)"
$Searcher.PageSize = 10000
$result = $Searcher.FindAll().Properties.cn
$result

第一次搜索是查找用户的 DN,因为这是下一次搜索中过滤器所必需的。要阅读有关“1.2.840.113556.1.4.1941”过滤器的更多信息,请参阅此文档

哦,echo 是 Powershell 中 Write-Output 的别名,最好直接使用它,甚至完全忽略它,因为它自己的字符串或变量无论如何都会默认为 Write-Output,正如您在 $result 运行时所看到的那样结尾。

于 2019-04-05T14:17:48.140 回答