查询用户是否在 Active Directory 中检查了 "Cannot change password"

Query if user has "Cannot change password" checked in Active Directory

我正在尝试检查我正在开发的应用程序的信息...

我正在尝试查询 userAccountControl,但我发现如果已设置,AD 不会正确更新它。

这是我目前搜索 UserAccountControl 的方式

 If (res.Properties.Contains("userAccountControl")) Then
            userAccountControl = doespasswordexpire(res.Properties("userAccountControl").Item(0))
            userAccountControlPNR = PasswordNotRequired(res.Properties("userAccountControl").Item(0))
            userAccountControlSCR = SmartCardRequired(res.Properties("userAccountControl").Item(0))
        Else
            userAccountControl = ""
            userAccountControlPNR = ""
            userAccountControlSCR = ""
 End If

我如何在 ADSI 或 LDAP 中执行此操作?我不想使用 PrincipalContext。

您不能使用 userAccountControl 属性修改甚至查询 "cannot change password" 设置。它在 Microsoft 的文档中被列为可能的标志,但它不起作用(不确定它是否曾经打算这样做?)。

要检查是否已设置,您必须在用户的 DACL 中解析出用户的 ACE。您可以从用户的 ntSecurityDescriptor 属性中获取它并以编程方式解析它。 this thread.

中有一个很好的例子

这里有一些额外的 MSDN 信息:https://msdn.microsoft.com/en-us/library/aa746398.aspx