sva*_*kak 3 powershell active-directory
如何查看由 Get-ADUser在后台执行的 LDAP 查询,即。这个命令
Get-ADUser -Filter * -Properties * | Where { $_.Enabled -eq $True } | Where { $_.PasswordNeverExpires -eq $False } | Where { $_.PasswordExpired -eq $False }
Run Code Online (Sandbox Code Playgroud)
我想知道发送到 Active Directory 服务器的确切 LDAP 查询。
编辑:我正在尝试将一些 Powershell 脚本转换为 Python,因此我需要可以提供给 python-ldap 的原始 LDAP 查询。
Edit2:Active Directory 管理中心有很好的学习 LDAP 查询的功能。在全局搜索中,您可以使用关键字和勾选复选框来构建查询,然后单击Convert to LDAP。享受漂亮而复杂的 LDAP 查询。
如果您真的想知道 Powershell Cmdlets 正在执行哪些确切的 LDAP 查询,那么您可以使用 DotPeek 反编译它们,使用我在此处概述的方法:
https://www.myotherpcisacloud.com/post/2013/07/08/Taking-a-Peek-Inside-Powershell-Cmdlets.aspx
用$(Get-Command Get-ADUser).DLL
看什么DLL的cmdlet的进口。然后使用Trace-Command
来查看 DLL 中调用的方法的名称Get-ADUser
。
Trace-Command -Name CommandDiscovery -Expression { Get-ADUser bob } -PSHost
Run Code Online (Sandbox Code Playgroud)
现在使用 JetBrains DotPeek 反编译该 DLL 并自己查看代码。
或者,与其经历所有这些混乱,不如这样做:
Get-ADUser -LDAPFilter "(objectCategory=person)"
Run Code Online (Sandbox Code Playgroud)
现在您确切地知道(并可以控制)它正在使用什么 LDAP 查询。
该ActiveDirectory
模块具有巧妙的逻辑,可以计算“流行”属性,例如用户帐户是否Enabled
已PasswordNeverExpires
设置或已设置并像常规属性一样呈现它们。
在内部,它们源自实际帐户属性,例如userAccountControl
和pwdLastSet
。
userAccountControl
是一个位域,包含一长串与帐户安全相关的设置,例如“用户无法更改密码”和帐户“已禁用”。
Microsoft 的 LDAP 实现让您可以使用按位运算符过滤此类属性,由对象标识符 (OID) 标识:
LDAP_MATCHING_RULE_BIT_AND: 1.2.840.113556.1.4.803
LDAP_MATCHING_RULE_BIT_OR : 1.2.840.113556.1.4.804
要查找Disabled
帐户,我们可以使用以下过滤器语法:
(&(userAccountControl:1.2.840.113556.1.4.803:=2))
Run Code Online (Sandbox Code Playgroud)
与往常一样,您可以使用 否定 ldap 表达式!
,在此示例中检索所有Enabled
帐户:
(!(userAccountControl:1.2.840.113556.1.4.803:=2))
Run Code Online (Sandbox Code Playgroud)
同样,名为DONT_EXPIRE_PASSWORD
65536 (0x10000) 的设置,我们可以找到这些帐户:
(&(userAccountControl:1.2.840.113556.1.4.803:=65536))
Run Code Online (Sandbox Code Playgroud)
计算密码过期时间有点复杂。为了帮助开发人员和集成商,Microsoft 实施了一个名为msDS-User-Account-Control-Computed
.
msDS-User-Account-Control-Computed
透明地返回与 相同的值userAccountControl
,但增加了以下位,在查找时即时计算:
UF_LOCKOUT 0x0010
UF_PASSWORD_EXPIRED 0x800000
UF_PARTIAL_SECRETS_ACCOUNT 0x4000000
UF_USE_AES_KEYS 0x8000000
Run Code Online (Sandbox Code Playgroud)
我还没有测试过这个,但是如果我没记错的话,这应该可以帮助您使用此过滤器可靠地识别密码过期的帐户:
(&(msDS-User-Account-Control-Computed:1.2.840.113556.1.4.803:=8388608))
Run Code Online (Sandbox Code Playgroud)
不幸的是,您不能在 LDAP 查询过滤器中使用构造属性,因此您需要做的是过滤前两个语句:
(&(!userAccountControl:1.2.840.113556.1.4.803:=2)(!userAccountControl:1.2.840.113556.1.4.803:=65536))
Run Code Online (Sandbox Code Playgroud)
请务必向目录服务器询问该msDS-User-Account-Control-Computed
值,然后在客户端对结果执行按位 AND 掩码。
归档时间: |
|
查看次数: |
4893 次 |
最近记录: |