【问题标题】:How to set "user cannot change password" AD attribute如何设置“用户不能更改密码”AD属性
【发布时间】:2012-02-17 12:54:32
【问题描述】:

我试图弄清楚如何使用 VB.NET 设置 AD 的“用户无法更改密码”属性。

我最初希望使用 http://support.microsoft.com/kb/305144 此处找到的 UserAccountControl 标志,但我意识到您不能像预期的那样设置 PASSWD_CANT_CHANGE 标志。这导致我发帖Preventing an Active Directory user from changing his/her password using DirectoryServices,但我无法进行保存。

这是我现在拥有的代码。

        Dim domainContext As PrincipalContext = New PrincipalContext(ContextType.Domain)
        Dim user As UserPrincipal = UserPrincipal.FindByIdentity(domainContext, "user5")
        user.UserCannotChangePassword = True
        user.Save(domainContext)

每次我尝试对此进行保存时,都会收到 InvalidOperationException。这方面的文档也不是很有帮助:http://msdn.microsoft.com/en-us/library/bb335863.aspx

让我感到奇怪的是,如果我为该 UserPrincipal 对象设置不同的属性,例如 SamAccountName,保存效果很好,但是一旦我引入 UserCannotChangePassword 属性,保存就会失败。

我已验证我用来执行此操作的用户具有适当的权限,但我不确定从这里去哪里...有什么想法吗?

【问题讨论】:

  • 这似乎也不起作用。我希望使用这个新的 UserPrincipal 类,因为它使我在 AD 管理方面的所有工作变得更加容易。我可以(理论上)用 3 行代码而不是 20 行代码更改属性。
  • 是的,它看起来像一个 DirectoryServicesCOMException,描述为“发生了约束冲突。”......我知道,这不太有用。在我原始帖子的 msdn 链接中,我看到如果主体尚未与 PrincipalContext 关联,或者主体无法插入存储中,则可能会发生此异常(InvalidOperationException)...我显然与 PrincipalContext 关联因为我可以保存其他属性,但是我不知道“不能插入商店”是什么意思,而且那里的帮助很少。
  • 刚刚在msdn.microsoft.com/en-us/library/ms180915(v=vs.90).aspx 尝试了两种 VB.NET 解决方案,都导致违反约束。我想知道我的 DirectoryEntry 对象是否搞砸了,但是当我可以在第一个示例中保存其他属性时,我验证它工作正常......我仔细检查了权限并且正在执行代码的帐户确实有更改此属性的权限...

标签: .net vb.net active-directory


【解决方案1】:

找到了一种老式的方法来做到这一点,感谢@juergen d 为我指明了正确的方向。估计我得解决了。

        Dim objThisUser As IADs
        Dim intUserFlags As Integer

        ' Bind to the user object with the current credentials.
        objThisUser = GetObject("WinNT://" + gstrDomain + "/" + "user5")

        intUserFlags = objThisUser.Get("userFlags")

        'can't change
        intUserFlags = intUserFlags Or ADS_UF_PASSWD_CANT_CHANGE

        ' Modify the userFlags property.
        objThisUser.Put("userFlags", intUserFlags)

        ' Commit the changes
        objThisUser.SetInfo()

我一直都在接近完美的解决方案,但就是无法让储蓄发挥作用。我猜这很好用。使用它只是意味着多几行代码,适应性差一点。

【讨论】:

    猜你喜欢
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    相关资源
    最近更新 更多