2013-05-21 35 views
1

我有這個;獲取用戶所在AD組的列表

PrincipalContext ctx = new PrincipalContext(ContextType.Domain); 
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, httpContext.User.Identity.Name); 
PrincipalSearchResult<Principal> authgroups = user.GetAuthorizationGroups(); 
PrincipalSearchResult<Principal> userGroups = user.GetGroups(); 

它有效。然而,我回來的團隊看起來並不像我期待的那樣。

使用gpresult /V從命令提示符給我一個列表,看起來像是;

BUILTIN\Administrators 
    Everyone 
    SQLServerMSSQLServerADHelperUser$ITVN1259 
    BUILTIN\Users 

但是使用代碼給了我;

Name ("zz.Enterprise Vault Users Group 3") 
Name ("CM-InternetAccessUsers(C)-SZ") 

如何獲得與gpresult相同的列表?

+0

你試過這個嗎? http://www.codeproject.com/Articles/18102/Howto-Almost-Everything-In-Active-Directory-via-C –

回答

2

我用的是這樣的 - 我認爲你只是缺少SamAccountName部分:

public string[] Groups 
    { 
     get { return UserPrincipal.Current.GetAuthorizationGroups() 
              .Select(e => e.SamAccountName) 
              .ToArray(); } 
    } 

編輯:使用GetAuthorizationGroups(),而不是GetGroups()的遞歸搜索(只返回安全組,不分佈組)。

+0

這仍然返回組的不正確的列表,雖然在這一點上,我想我可能已經給出不正確的信息開始,所以我認爲這些團體是好的。我喜歡你的答案,因爲它很簡單,並返回一個名稱列表,而不是對象,所以謝謝你和+1 – griegs

相關問題