2012-02-17 105 views
2

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

我原本希望使用这里找到的UserAccountControl标志http://support.microsoft.com/kb/305144,但我意识到你不能像设想的那样设置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对象的不同属性,如SAM帐户名,保存工作正常,但一旦我引入UserCannotChangePassword属性,节约失败。

我已验证我用于执行此操作的用户具有适当的权限,但我不确定从此处要去哪里......任何想法?

+0

你有没有尝试这个办法:http://msdn.microsoft.com/en-us/library/windows/desktop/aa746399%28v=vs.85%29.aspx – 2012-02-17 13:02:34

+0

似乎不是来工作的。我希望能够使用这个新的UserPrincipal类,因为它使我所有的AD管理工作变得更加简单。我可以(理论上)在3行代码中更改属性,而不是20个。 – Boeckm 2012-02-17 13:46:00

+0

是否存在内部异常? – 2012-02-17 19:17:29

回答

0

找到了一个老派的方式来做到这一点,谢谢指出我在正确的方向@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() 

我很接近全时具有完美的解决方案,但就是无法保存工作。这工作正常,我猜。使用这只意味着更多的代码行,并且适应性稍差。