如何在 PowerShell 中执行 LDAP 查询
- 在 PowerShell 中安装 Active Directory 模块
-
使用 PowerShell 过滤器的
Filter
参数 -
在 PowerShell 中使用
-LDAPFilter
参数进行 LDAP 过滤器

在使用 PowerShell 查询 Active Directory 时,最常见的挑战之一是如何正确构建过滤器语法。
不幸的是,所有 Active Directory PowerShell 模块的 cmdlet 上的 Filter 和 LDAP Filter 参数对许多人来说都是一个黑匣子。
本文将深入探讨如何使用 Active Directory 过滤器和 LDAP 过滤器。
在 PowerShell 中安装 Active Directory 模块
在继续之前,需要一些先决条件。
- 安装 PowerShell Active Directory 模块。
- 加入域的计算机。
- 成功连接并验证 Active Directory 域控制器。
通常,运行 Install-Module
命令应从远程 CDN 获取软件包并安装到您的计算机上。但是,对于 Active Directory
模块,我们必须建立一个先决条件包才能成功。
我们需要安装的先决条件包是 RSAT
或者 远程服务器管理工具
。
您可以运行下面的 PowerShell 脚本在您的计算机或服务器上安装 RSAT
。
在 Windows 10 上安装 RSAT:
Add-WindowsCapability -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0 -Online
在 Windows Server(从 2008 到 2016 的多个版本)上安装远程服务器管理工具:
Install-WindowsFeature -Name "RSAT-AD-PowerShell" -IncludeAllSubFeature
在您的计算机上安装远程服务器管理工具功能也将安装 Windows PowerShell 的 Active Directory 模块。
使用 PowerShell 过滤器的 Filter
参数
PowerShell 过滤器使用标准的 Windows PowerShell 表达式语法。这种方法通常被称为 Active Directory 搜索过滤器语法。
这些过滤器与 Filter
参数一起使用。
在过滤器内部,您将使用运算符比较各种 AD 对象属性。例如,Get-ADUser
命令返回一个 Name
属性。
因此,如果我们想要查找所有匹配特定名称的用户,您将使用:
Get-ADUser -Filter "Name -eq 'John'"
属性名称可以是 LDAP 名称或通过 Active Directory cmdlet 返回的属性的规范名称。
属性值通常用单引号或双引号括起来。唯一接受的通配符是星号 *
。
我们可以看到,上面用双引号括起来了过滤器,而 John
被单引号括起来。
在 PowerShell 中使用 -LDAPFilter
参数进行 LDAP 过滤器
轻量目录访问协议(Lightweight Directory Access Protocol,LDAP)是一种用于访问和修改目录数据的厂商中立协议。
当听到“目录”一词时,我们可能会想到一本电话簿,但在 Active Directory 的上下文中,这意味着更多。
Active Directory 存储并使许多不同类型的对象可访问,LDAP 协议用于保护这些数据。由于 Active Directory 可以存储许多不同的数据类型,应用程序和用户需要轻松查询该目录。
Active Directory 实现了 LDAP,即轻量目录访问协议。使用 cmdlet 的 -LDAPFilter
参数使您能够使用 LDAP 过滤器,例如在 Active Directory 用户和计算机中创建的那些过滤器。
LDAP 搜索过滤器的语法在 RFC 编号 4515 中定义。每个过滤器规则用括号 ()
括起来。
以下是一些使用 Active Directory 组过滤器作为基础的示例,以开始创建您自己的过滤器。
- 名称 (CN) 为
Department
的所有组。
`'(cn=Department)'
- 名称为
Department
并且描述为Prod
的所有组。
'(&(cn=Department)(description=Prod))'
- 名称为
Department
或Share Access
的所有组。
'(|(cn=Professional Services Department)(cn=Share Access))'
- 所有组的描述不是
Prod
。包括那些没有描述字段的组。
'(!(description=Prod))'
- 描述为
Prod
但名称不是Department
的所有组。
'(&(description=Prod)(!(cn=Department)))'
- 描述为
\\fileserver1\share
的所有组。
'(description=\5c\5cfileserver1\5cshare)'
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn