【问题标题】:How to look for members of a group or object with adsi如何使用 adsi 查找组或对象的成员
【发布时间】:2019-04-05 11:43:44
【问题描述】:

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

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

uname ="*anyoldusername*"

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

echo $result

【问题讨论】:

  • 你为什么不用get-adprincipalgroupmembership
  • 我需要使用不允许使用广告模块的解决方案。我仅限于 adsi 和 powershell 2.0
  • 如果MemberOf错了,你的问题就更严重了。
  • 是的,没错。不幸的是,我无法更改那部分。

标签: powershell member adsi directorysearcher


【解决方案1】:

应该这样做:

$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,正如您在 $result 时看到的那样最后运行。

【讨论】:

  • 谢谢!我会试一试! Echo 在那里显示我是否在变量中得到任何东西。主脚本将结果输出到 gui 中的文本框中。
  • 酷,如果您有任何问题,请告诉我。还要澄清一下,变量本身将具有与 echo 完全相同的输出。
  • 得到一个奇怪的错误:`````````` 枚举集合时发生错误:有更多数据可用。 .在 line:8 char:1 + $result = $Searcher.FindAll().Properties.cn + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (System.Director...sultsEnumerator:ResultsEnumerator) [], RuntimeException + FullyQualifiedErrorId : BadEnumeration ````````` 我是在这里超时?
  • 太棒了,奇怪的是域根对组不起作用,它应该覆盖下面的所有 OU。
  • 如前所述,这里的AD有更大的问题。 :D 无论如何,感谢帮助!再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-25
  • 1970-01-01
  • 2011-12-01
  • 2011-09-10
  • 1970-01-01
相关资源
最近更新 更多