HOWTO · PowerShell

如何在 PowerShell 中执行 LDAP 查询

准备 Active Directory 模块,然后为目录查询选择 PowerShell 表达式筛选器或 LDAP 搜索筛选器。

本页内容

若要查询 Active Directory,当 cmdlet 支持 PowerShell 表达式语法时,请配合该语法使用 Filter 参数。当您想要编写 LDAP 搜索筛选器时,请使用 -LDAPFilter。这两种方法都需要 Active Directory 模块,以及与域控制器的已验证连接。以下各节涵盖设置、用户查询和 LDAP 组筛选器模式。

在 PowerShell 中安装 Active Directory 模块

查询前,请安装 Active Directory 模块、使用已加入域的计算机,并向域控制器进行身份验证。此模块由远程服务器管理工具 (RSAT) 提供;单独使用 Install-Module 并不会安装它。

在受支持的 Windows 客户端版本上,可以使用 Add-WindowsCapability -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0 -Online 添加 RSAT 功能。在提供该功能的 Windows Server 版本上,请使用 Install-WindowsFeature -Name RSAT-AD-PowerShell -IncludeAllSubFeature。这些命令取决于平台和版本;请确认该功能适用于目标操作系统,并在适当提升权限的 PowerShell 会话中运行该命令。安装 RSAT 组件即可为 Windows PowerShell 提供 Active Directory 模块。

使用 Filter 参数进行 Active Directory 查询

Active Directory 模块的 Filter 参数接受 PowerShell 表达式语法。使用 -eq 等运算符比较受支持的目录属性,并将字符串值加上引号。通配符 * 可匹配字符串值中的文本。例如,按名称查询用户可写为 Get-ADUser -Filter "Name -eq 'John'"。请查阅特定 cmdlet 的文档或 Get-Help 输出,了解其支持的参数和可筛选的属性;参数支持和属性名称可能因 cmdlet 而异。

这个独立示例会为部门查询构建筛选器字符串。将其调整为查询时,请替换示例值;Active Directory 查询本身需要上述模块和域访问权限。

$department = 'Engineering'
$filter = "Department -eq '$department'"
Write-Output $filter
Department -eq 'Engineering'

此示例已执行并产生了上方所示的筛选器字符串;它会构建一个字符串,不会联系目录。请将 PowerShell 表达式保留在传递给 -Filter 的值内。

使用 -LDAPFilter 参数进行 LDAP 查询

LDAP 是一种与供应商无关的协议,用于访问和修改目录数据。它本身并不保护目录数据;请使用为您的环境配置的身份验证和传输保护。Active Directory 实现了 LDAP,其搜索筛选器语法定义于 RFC 4515。每个筛选器规则都用括号括住。当 cmdlet 支持 -LDAPFilter 时,此参数接受 LDAP 搜索筛选器语法;选择它之前,请确认相关 cmdlet 支持的参数。

以下是 Get-ADGroup -LDAPFilter 的筛选器值。它们是语法示例,不是独立命令,其结果取决于目录:

  • 通用名称 (cn) 为 Department 的组: Get-ADGroup -LDAPFilter '(cn=Department)'.
  • 通用名称为 Department 且描述为 Prod 的组: Get-ADGroup -LDAPFilter '(&(cn=Department)(description=Prod))'.
  • 通用名称为 Professional Services Department 或 Share Access 的组: Get-ADGroup -LDAPFilter '(|(cn=Professional Services Department)(cn=Share Access))'.
  • 描述不为 Prod 的组,包括没有该属性的条目: Get-ADGroup -LDAPFilter '(!(description=Prod))'.
  • 描述为 Prod 且排除通用名称 Department 的组: Get-ADGroup -LDAPFilter '(&(description=Prod)(!(cn=Department)))'.
  • 描述包含路径 \\fileserver1\share 的组: Get-ADGroup -LDAPFilter '(description=\5c\5cfileserver1\5cshare)'. 在 LDAP 筛选器中,\5c 代表一个字面反斜杠;在根据输入构建筛选器时,请按照 RFC 4515 转义值中的特殊筛选器字符。