2012-02-17 107 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() 

我很接近全時具有完美的解決方案,但就是無法保存工作。這工作正常,我猜。使用這隻意味着更多的代碼行,並且適應性稍差。