DirectorySearcher 查找具有特定经理的所有条目

问题描述

我想通过 PowerShell 查找具有特定管理器的所有 AD 条目。我需要如何设置过滤器?

假设我们有以下组织:userauserbusercuserd

所以我希望过滤器返回 usera、userb、userc 和 userd。

$ADS = New-Object System.DirectoryServices.DirectorySearcher
$ADS.Filter = "(|(cn=usera)(manager=*CN=usera*))"
$Results = $ADS.FindAll()
$Results.Count

$ADS.Filter = "(|(cn=usera)(manager=*usera*))"
$Results = $ADS.FindAll()
$Results.Count

$ADS.Filter = "(|(cn=usera)(manager=usera))"
$Results = $ADS.FindAll()
$Results.Count

结果总是空的。但是如果我将完整的专有名称属性从 usera 复制到过滤器中,它就可以工作。问题是,我通常在启动脚本时没有这个值,所以我必须先进行另一个查询,然后才能开始我想避免的实际查询(下面的示例)。

$ADS = New-Object System.DirectoryServices.DirectorySearcher
$ADS.Filter = "(cn=usera)"
$Result1 = $ADS.FindOne()
$ADS.Filter = "(|(cn=usera)(manager=$($Result1.Properties.distinguishedname)))"
$Results = $ADS.FindAll()
$Results.Count

输出:4

解决方法

为什么 manager 属性会指向 DN?真正的经理财产不是 SID 吗?可能在查询过程中发生了一些转换。