我需要以以下格式列出特定本地组中的所有用户:"Domain\UserName“。我可以为组提取GroupPrincipal对象的集合,但我不知道如何将用户转换为所需的格式。GroupPrincipal没有属性域。
下面的代码输出没有域的用户(例如"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名称?如果是这样的话,如何获得它?
发布于 2011-07-20 20:08:39
您可以从主体的上下文中获取域详细信息。例如:
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。例如:
foreach (var p in group.GetMembers(false))
{
Console.WriteLine(p.Sid.Translate(typeof(NTAccount)).ToString());
}发布于 2011-07-20 21:44:59
在纯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]);https://stackoverflow.com/questions/6759463
复制相似问题