2010-02-03 112 views
0

從腳本創建Active Directory用戶時,我還需要設置它們不能更改其密碼的選項。通過管理GUI,可以輕鬆完成,方法是選中「用戶無法更改密碼」。然而,以編程方式,這是另一回事。我發現recipe涉及與ADSI COM API交互,但出於技術原因,我希望通過.NET API完成相同操作(簡短版本:我無法通過腳本訪問ADSI COM API) 。防止Active Directory用戶使用DirectoryServices更改他/她的密碼

我曾嘗試翻譯上述配方純.NET,因爲在這條巨蟒片段中可以看出,但不幸沒有影響:

dir_entry = System.DirectoryServices.DirectoryEntry(ad_user) 
obj_sec = dir_entry.ObjectSecurity 
# Password GUID 
guid = System.Guid(System.String("ab721a53-1e2f-11d0-9819-00aa0040529b")) 
for identity in (r"NT AUTHORITY\SELF", "EVERYONE"): 
    identity = System.Security.Principal.NTAccount(identity) 
    access_rule = System.DirectoryServices.ActiveDirectoryAccessRule(
      identity, 
      System.DirectoryServices.ActiveDirectoryRights.ExtendedRight, 
      System.Security.AccessControl.AccessControlType.Deny, 
      guid 
      ) 
    obj_sec.AddAccessRule(access_rule) 
dir_entry.ObjectSecurity = obj_sec 
dir_entry.CommitChanges() 

將不勝感激任何幫助:)

回答

1

如果你可以使用.NET 3.5,那裏有一個名爲System.DirectoryServices.AccountManagment的新名字空間。該名稱空間中的UserPrincipal類將允許您通過簡單地將布爾型UserCannotChangePassword屬性設置爲false來設置「無法更改密碼」。

+0

謝謝,看起來很有趣。我將不得不查看是否可以通過Python for .NET橋接來使用該.NET版本。 – aknuds1 2010-02-03 15:14:49

+0

非常感謝,這個解決方案非常完美! – aknuds1 2010-02-03 19:57:18

相關問題