我想获取分配给用户的所有组。我使用了下面提到的代码块:
WindowsIdentity windowsIdentity = new WindowsIdentity(userName);
IdentityReferenceCollection irc = windowsIdentity.Groups;
Console.WriteLine("The groups identified are : ");
foreach (IdentityReference identityReference in irc)
Console.WriteLine(identityReference.Translate(typeof(System.Security.Principal.NTAccount)).ToString());
该用户的组详细信息之一是:
预期输出为:example.com\Group1
我得到的输出是:example\Group1
任何人都可以建议如何获得预期的输出。
预先感谢
答案 0 :(得分:0)
您的域有两个名称:
example.com
EXAMPLE
NetBIOS名称通常与DNS名称相似,但不带点。但是,它不必类似。您可能具有example.com
的域DNS,但是NetBIOS名称为MYDOMAIN
。
当对象显示为domain\username
格式时,将始终使用NetBIOS名称。这就是为什么您看到EXAMPLE\Group1
的原因。因此,这完全是正常的并且是预期的。
您是否有任何理由必须以DNS name\username
的格式使用它?我不知道这是什么要求。
作为旁注,我写了一篇有关获取所有用户组的文章,您可能会有所帮助,或者可能找不到帮助:Finding all of a user’s groups
更新:如果您确实需要DNS name\username
格式,可以尝试一下(此方法未经测试,但应该关闭了)。这将使用SID在AD中找到该组,然后从canonicalName
属性中拉出域的DNS名称。
foreach (SecurityIdentifier groupSid in irc) {
using (var group = new DirectoryEntry("LDAP://<SID=" + groupSid.Value + ">")) {
group.RefreshCache(new [] { "canonicalName", "sAMAccountName" });
var canonicalName = group.Properties["canonicalName"].Value.ToString();
var domainDns = canonicalName.Substring(0, canonicalName.IndexOf("/"));
Console.WriteLine(domainDns + "\\" + group.Properties["sAMAccountName"].Value);
}
}