如何从GroupPrincipal获取域名?

时间:2011-07-20 09:07:12

标签: .net active-directory

我需要按以下格式列出特定本地组中的所有用户:“Domain \ UserName”。我可以为该组提取GroupPrincipal对象的集合,但我不知道如何以所需格式获取用户。 GroupPrincipal没有属性Domain。

以下代码输出没有域的用户(例如“UserName”)。

using (var context = new PrincipalContext(ContextType.Machine, null))
{
    using (var group = GroupPrincipal.FindByIdentity(context, IdentityType.SamAccountName, @"My Local Group"))
    {
        if (group != null)
        {
            foreach (var p in group.GetMembers(false))
            {
                Console.WriteLine(p.SamAccountName);
            }
        }
    }
}

是否可以从主要对象获取域netbios名称?如果是这样,如何获得它?

2 个答案:

答案 0 :(得分:10)

您可以从主体的上下文中获取域详细信息。 e.g:

foreach (var p in group.GetMembers(false))

    {
        Console.Write(p.SamAccountName);
        if (p.ContextType == ContextType.Domain)
        {
            Console.Write(" ({0})", p.Context.Name);
        }

        Console.WriteLine();
    }

如果您只想从域中的计算机以“域\用户”格式输出帐户名称,则可以将委托人的SecurityIdentifier转换为NTAccount。 e.g:

foreach (var p in group.GetMembers(false))
{
    Console.WriteLine(p.Sid.Translate(typeof(NTAccount)).ToString());
}

答案 1 :(得分:0)

在纯LDAP上,检索域分区的Netbios名称的方法如下(假设我正在处理DC = dom,dc = fr分区):

/* Connection to Active Directory
 */
DirectoryEntry deConf = new DirectoryEntry("LDAP://WM2008R2ENT:389/CN=Partitions,CN=Configuration,DC=dom,DC=fr", "user", "password");

/* Directory Search
 */
DirectorySearcher dsLookForNetb = new DirectorySearcher(deConf);
dsLookForNetb.Filter = "(nCName=dc=dom,dc=fr)";
dsLookForNetb.SearchScope = SearchScope.Subtree;
dsLookForNetb.PropertiesToLoad.Add("nETBIOSName");

SearchResult RefObj = dsLookForNetb.FindOne();

Console.WriteLine(RefObj.Properties["nETBIOSName"][0]);