【问题标题】:DirectoryServices filter and methodsDirectoryServices 过滤器和方法
【发布时间】:2011-09-29 13:01:01
【问题描述】:

我正在尝试从 AD 获取 OU/DC 中所有用户的列表。

这是我想出的:

$erroractionpreference = "SilentlyContinue"
function Get-GroupMembers {
    $filter = "(&(objectCategory=person)(objectClass=user))"
    $objSearcher = New-Object System.DirectoryServices.DirectorySearcher
    $objSearcher.Filter = $filter
    $colResults = $objSearcher.FindAll()

        foreach ($member in $colResults) { 
            $member
        }
}
get-GroupMembers 

如果我将过滤器更改为

    $filter = "(&(objectCategory=person)(objectClass=user)("OU=Admin Accounts,DC=admin"))

没有返回。这是为什么呢?
我还想显示某些值(如果帐户处于活动状态或已禁用等),但如果我通过管道将 $member 传递到 gm,我什么也得不到。

任何帮助将不胜感激。

【问题讨论】:

  • 小心@TiZon 你正在混合三件事。 Ajk 向您解释如何将 ADSI 对象与 DirectorySearcher 一起使用,直到 PowerShell V1.0 才有效。 USlackr 正在使用来自 PowerShell V2.0 上的 ActiveDirectory 模块和 W2K8R2 的 Cmdlet。 Christian 正在使用来自 PowerShell V1.0 以来可用的 Qest 包的 Cmdlet。所有 3 种解决方案都有效,但不要混合使用这三种方法
  • @JPBlanc:感谢您的提醒!

标签: powershell active-directory windows-server-2008-r2


【解决方案1】:

如果要搜索特定的 OU,可以将其设置为搜索器对象的根:

$objOU = New-Object System.DirectoryServices.DirectoryEntry("LDAP://OU=Admin Accounts,DC=admin")
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.SearchRoot = $objOU

您还可以控制搜索范围。以下是与您最相关的两个选项:

# Option 1: Return only users in the 'Admin Accounts' OU
$objSearcher.SearchScope = "OneLevel"

# Option 2: Return users in the 'Admin Accounts' OU or any level beneath it
$objSearcher.SearchScope = "SubTree"

除非您覆盖搜索根和范围,否则您将获得对当前域的根执行子树搜索的默认设置。您可以在这篇 TechNet 文章中找到更多详细信息:

编辑: 正如 uSlackr 所指出的,您的 DC 组件确实看起来很可疑。在我的示例中,我将其原封不动地保留了下来,但是无论您使用哪种方法,一个不完整/格式错误的基础对象名称都会影响您的搜索。

【讨论】:

  • 谢谢,这成功了!我将您的答案与@uSlackr 的帮助相结合
【解决方案2】:

直流分量不完整。它应该看起来像这样:

 $filter = "(&(objectCategory=person)(objectClass=user)("OU=Admin Accounts,DC=myco,dc=com"))

但 dc=admin,dc=com 应该从本示例中的 AD 域名“admin.com”转换而来,这似乎不正确

使用 Microsoft AD cmdlet 更容易。

get-aduser -filter * -searchbase "ou=test,dc=mycom,dc=com"

有关下载和使用 cmdlet 的信息,请访问 TechNet

【讨论】:

  • 谢谢,这成功了!我将您的答案与@ajk 的帮助相结合
【解决方案3】:

您可以尝试使用 Quest ActiveRolesManagement Shell for ActiveDirectory,可从此处下载:

http://www.quest.com/downloads/

该软件包是免费软件,是用于从 powershell 进行 Active Directory 管理的更准确的 cmdlet。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-22
    • 2021-07-18
    • 2021-11-10
    • 2019-03-26
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    相关资源
    最近更新 更多