2010-09-06 57 views
1

我試圖寫一些(其中包括)將用戶添加到AD組 - 使用VS2010,.Net4和System.DirectoryServices.AccountManagement中的庫設施。奇怪的COM互操作異常0x80005000使用System.DirectoryServices.AccountManagement庫

我已經通過下面的示例代碼獲得了用戶和組,並且這適用於其他操作,如啓用或禁用帳戶。

group = System.DirectoryServices.AccountManagement.GroupPrincipal.FindByIdentity(_UserContext, Name); 

user = System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(_UserContext, Name); 

現在,試圖將用戶添加到組,如:

group.Members.Add(user); 

我得到一個錯誤堆棧跟蹤開始像一個下面一個COM互操作錯誤中列出0x80005000(未知)。其他用戶以及32位和64位版本也會發生這種情況。在網上搜索這個提出了一些論壇問題,但我找不到任何答案。從理論上講,這應該起作用 - this codeproject sample也在做同樣的事情。

有沒有人看到這個錯誤或有任何想法可能會導致它?

堆棧跟蹤頂部:

Unhandled Exception: System.DirectoryServices.AccountManagement.PrincipalOperati 
onException: Unknown error (0x80005000) ---> System.Runtime.InteropServices.COME 
xception: Unknown error (0x80005000) 
    at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail) 
    at System.DirectoryServices.DirectoryEntry.Bind() 
    at System.DirectoryServices.DirectoryEntry.get_AdsObject() 
    at System.DirectoryServices.DirectorySearcher.FindAll(Boolean findMoreThanOne 
) 
    at System.DirectoryServices.DirectorySearcher.FindOne() 
    at System.DirectoryServices.AccountManagement.ADStoreCtx.IsMemberOfInStore(Gr 
oupPrincipal g, Principal p) 
    --- End of inner exception stack trace --- 
    at System.DirectoryServices.AccountManagement.ADStoreCtx.IsMemberOfInStore(Gr 
oupPrincipal g, Principal p) 
    at System.DirectoryServices.AccountManagement.PrincipalCollection.ContainsNat 
iveTest(Principal principal) 
    at System.DirectoryServices.AccountManagement.PrincipalCollection.Contains(Pr 
incipal principal) 
    at System.DirectoryServices.AccountManagement.PrincipalCollection.Add(Princip 
al principal) 
    at System.DirectoryServices.AccountManagement.PrincipalCollection.Add(UserPri 
ncipal user) 

回答

2

我也碰到了與(GroupPrincipal實例)相同的問題.Members.Add(UserPrincipal實例)。

由於GetUnderlyingObject方法,解決方法(在IronPython中)非常簡單。

de = group.GetUnderlyingObject 
# Group member DNs are kept in 'member' attribute in LDAP 
de.Properties['member'].Add(user.DistinguishedName) 
de.CommitChanges() # Save your work 
+0

是的,我找到了一些類似的東西,並使用該解決方法。 – ConcernedOfTunbridgeWells 2010-11-26 16:15:26

2

剛纔碰到這個,注意到代碼項目示例在創建上下文(而不是使用null)時明確使用了域的名稱。我改變了我的代碼,明確指定域名,現在它工作正常 - 我可以group.Members.Add(用戶)沒有問題。