[玩转系统] 在学习 AD 的同时掌握 PowerShell 中的 LDAP 过滤器
作者:精品下载站 日期:2024-12-14 13:18:05 浏览:12 分类:玩电脑
在学习 AD 的同时掌握 PowerShell 中的 LDAP 过滤器
使用 PowerShell 查询 Active Directory 时最常见的问题之一是如何正确构建过滤器语法。所有 ActiveDirectory PowerShell 模块 cmdlet 上的Filter
和 LDAP Filter 参数对许多人来说都是一个黑匣子。
在这篇博文中,我们将深入了解如何使用 Active Directory 过滤器。我希望在这篇文章结束时,您将不再尝试使用 Where-Object
和过滤器!
先决条件
对于我要向您展示的任何代码,我将假设以下几点:
- 您已安装 PowerShell ActiveDirectory 模块
- 您使用的是已加入域的计算机
- 您可以成功连接并验证 AD 域控制器
使用许多 Active Directory cmdlet 搜索对象时,可以使用两种不同的筛选器语言:PowerShell 筛选器和 LDAP 筛选器。
PowerShell 过滤器
PowerShell 筛选器使用标准 PowerShell 表达式语法。这通常称为 Active Directory 搜索过滤器语法。
这些过滤器与 Filter
参数一起使用。 Filter
参数语法
运营商
在为 Filter
参数构建过滤器时,您需要至少使用一个运算符。这里使用的运算符是您在使用像 Where-Object
这样的命令时可能会用到的熟悉的运算符。
在 Filter
参数内部,您可以使用以下运算符。
等于
-le小于或等于
-ge大于或等于
-ne不等于
-lt少于
-gt比...更棒
-approx约等于
-bor按位或
-band按位与
-recursivematch递归匹配
-like喜欢
-notlike不喜欢
-and布尔与
-or布尔或
-not布尔非
参考 AD 对象属性
在过滤器内部,您将使用运算符比较各种 AD 对象属性。例如,Get-AdUser
cmdlet 返回 Name
属性。如果您想查找与特定名称匹配的所有用户,您可以使用:
PS51> Get-Aduser -Filter "Name -eq 'Adam Bertram'"
属性名称可以是随 AD cmdlet 返回的属性的名称或 LDAP 筛选器名称。
属性值通常用单引号或双引号括起来。唯一接受的通配符是星号 (*)。您可以在上面看到过滤器被双引号包围,而 Adam Bertram 被单引号包围。
在过滤器中使用某些字符时必须进行“转义”。这些都是:
什么是 Active Directory LDAP?
LDAP(即轻量级目录访问协议)是一种与供应商无关的协议,用于访问和修改目录数据。当听到目录这个词时,您可能会想到电话簿,但在 Active Directory 的上下文中,这意味着更多。许多不同的对象类型都通过 Active Directory 进行存储和访问,LDAP 协议作为访问该数据的一种方式。
由于 Active Directory 可以存储许多不同的数据类型,因此应用程序和用户需要一种轻松查询该目录的方法。请继续阅读以了解 LDAP 过滤器如何协助过滤该数据!
LDAP 过滤器
Active Directory 实现了 LDAP,即轻量级目录访问协议。通过将 LDAPFilter
参数与 cmdlet 结合使用,您可以使用 LDAP 过滤器,例如在 Active Directory 用户和计算机中创建的过滤器。
LDAP 过滤器的语法在 RFC 编号 4515 中定义。
每个过滤规则都用括号 ( )
括起来。可以通过将组括在括号中并包含以下比较器来对过滤规则进行分组:
和
|或者
!不是
LDAP 过滤器还有一个特殊的匹配规则对象标识符(OID):
1.2.840.113556.1.4.803按位与
1.2.840.113556.1.4.804按位或
1.2.840.113556.1.4.1941链匹配(用于专有名称属性)
有四种过滤器类型:
=等于
~=约等于
>=大于或等于
<=小于或等于
有四种项目类型:
=简单的
=*展示
=something*子串
Extensible因类型而异
LDAP 过滤器规则必须与属性的 LDAP 名称一起使用,并且如果在 LDAP 过滤器中使用某些字符值,则必须对其进行“转义”。这些都是:
*\2a
(\28
)\29
\\5c
NUL\00
用于比较的属性值通常不需要用引号引起来。
LDAP 过滤器示例
构建 LDAP 过滤器可能具有挑战性。以下是一些使用活动目录组过滤器的示例,您可以将其用作开始创建自己的过滤器的基础。
所有名称为“专业服务部”(cn) 的团体
'cn -eq "专业服务部门"'
或 `'(cn=专业服务部门)'
所有名称为“专业服务部门”且描述为“实时”的群组
'(cn -eq "专业服务部") -and (description -eq "Live")'
或'(&(cn=专业服务部)(description=Live))'
所有名称为“专业服务部门”或“所有部门共享访问权限”的团体
'(cn -eq "专业服务部门") - 或 (cn -eq "所有部门共享访问权限")'
或'(|(cn=专业服务部门)(cn=全部部门共享访问))'
所有团体都没有“Live”的描述。 包括那些根本没有描述字段的内容
'(!(description=Live))'
所有团体都没有“Live”的描述。 排除那些根本没有描述字段的内容
'描述-ne“Live”'
所有描述为“Live”但名称不为“Professional Services Department”的团体
'(description -eq "Live") -and (cn -ne "专业服务部")'
或'(&(description=Live)(!(cn=专业服务部) ))'
描述为“\\fileserver1\fileshare”的所有组
'description -eq "ccfileserver1cfileshare"'
或'(description=ccfileserver1cfileshare)'
使用 RecursiveMatch 或链匹配
使用匹配规则 OID 或 RecursiveMatch
参数是解决有关查询 AD 的常见问题的有效方法:“我怎样才能知道用户所属的所有组,直接还是间接?' 您可以使用 Active Directory 搜索过滤器 memberOf
属性来查找。
使用简单的 LDAP 匹配规则比大型脚本要高效得多。使用我们的示例域domain.local,Kristin Diaz 是专业服务部门安全组的直接成员。查看 AD 中她的 memberOf
属性反映了这一点;仅显示专业服务部门。
PS51> Get-ADUser -Identity Kristin.Diaz -Property memberOf
DistinguishedName : CN=Diaz Kristin,OU=Professional Services,OU=All User Accounts,DC=domain,DC=local
Enabled : True
GivenName : Kristin
MemberOf : {CN=Professional Services Department,OU=All Groups,DC=domain,DC=local}
Name : Diaz Kristin
ObjectClass : user
ObjectGUID : 04fe6336-c541-4e71-b7ed-6fee7db23482
SamAccountName : Kristin.Diaz
SID : S-1-5-21-447422785-3715515833-3878445295-1186
Surname : Diaz
UserPrincipalName :
通过使用匹配规则 OID 或 RecursiveMatch
参数,您会发现它们间接是所有部门共享访问的成员。这是因为专业服务部门组是所有部门共享访问的成员。
PS51> Get-ADGroup -LDAPFilter '(member:1.2.840.113556.1.4.1941:=CN=Diaz Kristin,OU=Professional Services,OU=All User Accounts,DC=domain,DC=local)'
PS51> Get-ADGroup -Filter 'member -RecursiveMatch "CN=Diaz Kristin,OU=Professional Services,OU=All User Accounts,DC=domain,DC=local"'
两者都返回以下内容:
DistinguishedName : CN=All Departments Share Access,OU=All Groups,DC=domain,DC=local
GroupCategory : Security
GroupScope : Universal
Name : All Departments Share Access
ObjectClass : group
ObjectGUID : 8ac0e0b7-9225-40a4-b168-a0330960e182
SamAccountName : All Departments Share Access
SID : S-1-5-21-447422785-3715515833-3878445295-1254
DistinguishedName : CN=Professional Services Department,OU=All Groups,DC=domain,DC=local
GroupCategory : Security
GroupScope : Universal
Name : Professional Services Department
ObjectClass : group
ObjectGUID : a8432583-7cac-4e8e-8d94-51e1c5bb1989
SamAccountName : Professional Services Department
SID : S-1-5-21-447422785-3715515833-3878445295-1255
SearchBase 和 SearchScope 参数
在大型环境中,AD 可以包含数千个对象。提高性能并减少任何查询返回的对象数量的一种方法是确定搜索范围。
SearchBase
参数确定 AD 层次结构中任何搜索的开始位置。使用 cmdlet 时,这是一个可分辨名称的字符串表示形式(默认情况下是域的“顶部”)。 SearchScope
也分为三个级别:
- Base - 已指定为 SearchBase 的对象。
- OneLevel - 搜索立即包含在 SearchBase 中但不在任何子容器中的对象。
- SubTree - 在 AD 层次结构中递归地向下搜索 SearchBase 和任何子容器中包含的对象。
在上面的示例中,将 SearchBase 设置为 OU=All User Accounts,DC=domain,DC=local,SearchScope
为 Base
将尝试查询 OU 对象本身,OneLevel
的 SearchScope
将仅搜索所有用户帐户 OU,而 SearchScope
则仅搜索 OU 对象。 SubTree
的 将搜索“所有用户帐户”和“专业服务”OU。
概括
您现在应该很好地了解如何使用 Active Directory PowerShell cmdlet 进行过滤。您可以看到,构建完美的过滤器语法需要做很多工作。构建适当的过滤器比使用 Where-Object
cmdlet 要困难得多。
但花时间学习过滤 AD 对象的“正确”方法,并获得出色性能和效率的回报!
进一步阅读
- 32 个 Active Directory 脚本可实现一切自动化
- TechNet 上的 LDAP 语法过滤器
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag