如何设置“用户无法更改密码”的AD属性

时间:2012-02-17 12:54:33

标签: .net vb.net active-directory

我正在尝试弄清楚如何使用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属性,保存失败。

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

1 个答案:

答案 0 :(得分: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()

我一直都很接近拥有一个完美的解决方案,但却无法获得拯救。我觉得这很好用。使用它只意味着更多的代码行,并且适应性稍差。