如何使用 adsi 查找组或对象的成员

How to look for members of a group or object with adsi

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

我尝试使用以下代码在 OU 中的所有组的 "members" 属性中查找用户名(或对象名),然后取回该组的名称。 不幸的是,我想我错过了一些东西。 反向搜索(IE:列出一个组的成员)正在工作,但在我的情况下我不知道组的名称。我还需要所有的组,而不仅仅是一个组。

uname ="*anyoldusername*"

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

echo $result

应该这样做:

$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”过滤器的更多信息,请参阅 this documentation

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