在 PowerShell 中执行 LDAP 查询
- 在 PowerShell 中安装 Active Directory 模块
-
为 PowerShell 过滤器使用
Filter
参数 -
在 PowerShell 中为 LDAP 过滤器使用
-LDAPFilter
参数
使用 PowerShell 查询 Active Directory 时最常见的挑战之一是如何正确构建过滤器语法。
不幸的是,所有 Active Directory PowerShell 模块 cmdlet 上的过滤器和 LDAP 过滤器参数对许多人来说都是一个黑匣子。
本文将深入了解如何使用 Active Directory 过滤器和 LDAP 过滤器。
在 PowerShell 中安装 Active Directory 模块
在继续之前,需要一些先决条件。
- 已安装 PowerShell Active Directory 模块。
- 加入域的计算机。
- 成功连接并验证到 Active Directory 域控制器。
通常,运行命令 Install-Module
应该从远程 CDN 获取软件包并将其安装在你的计算机上。尽管如此,对于 Active Directory
模块,我们必须建立一个先决条件包才能成功。
我们需要安装的必备包是 `RSAT 或 Remote Server Administration Tools。
你可以运行下面的 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 中为 LDAP 过滤器使用 -LDAPFilter
参数
轻量级目录访问协议 (LDAP) 是一种与供应商无关的协议,用于访问和修改目录数据。
当听到目录这个词时,我们可能会想到电话簿,但这在 Active Directory 的上下文中意味着更多。
AD 存储和访问了许多不同的对象类型,LDAP 协议用于保护这些数据。由于 AD 可以保留许多不同的数据类型,因此应用程序和用户需要轻松查询该目录。
Active Directory 实现了 LDAP,即轻量级目录访问协议。将 -LDAPFilter
参数与 cmdlet 一起使用,你可以使用 LDAP 过滤器,例如在 Active Directory 用户和计算机中创建的过滤器。
LDAP 搜索过滤器的语法在 RFC 编号 4515 中定义。每个过滤器规则都用圆括号 ()
括起来。
以下是一些使用 Active Directory 组过滤器作为基础开始创建你自己的过滤器的示例。
- 所有名称 (CN) 为
Department
的组。
`'(cn=Department)'
- 名称为
Department
且描述为Prod
的所有组。
'(&(cn=Department)(description=Prod))'
- 名称为
部门
或共享访问
的所有组。
'(|(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