请原谅我,如果我对这个主题的理解有一些缺点,我只知道我对域名和活动目录的了解,因为我从他们那里学到了什么。
域名有两个不同的“版本”。第一个是我所谓的DNS域名,就像 company.int (对于用户max@company.int)而第二个就像 prefixname (对于用户prefixname \ max),他们都会引用同样的事情。
我的问题是,如果给出“company.int”,我该如何将其转换为“prefixname”?
编辑:或者给定一个System.DirectoryServices.ActiveDirectory.Domain对象,如何获取前缀名?
EDIT2:另外,除此之外还有“prefixname”的名称吗?我永远不知道该怎么称呼它。
EDIT3:我想要获得的值与Windows登录屏幕上显示的“登录到”(它列出域和您的计算机)的值相同。
EDIT4:我发现我可以通过以下方式获得价值:
SecurityIdentifier sid = GetCurrentUserSID();
string prefixName = sid.Translate(typeof(NTAccount)).Value.Split('\\')[0];
有没有人知道获得此名称的更好方法?
答案 0 :(得分:4)
我应该这样做,我希望:
private string GetNetbiosDomainName(string dnsDomainName)
{
string netbiosDomainName = string.Empty;
DirectoryEntry rootDSE = new DirectoryEntry("LDAP://RootDSE");
string configurationNamingContext = rootDSE.Properties["configurationNamingContext"][0].ToString();
DirectoryEntry searchRoot = new DirectoryEntry("LDAP://cn=Partitions," + configurationNamingContext);
DirectorySearcher searcher = new DirectorySearcher(searchRoot);
searcher.SearchScope = SearchScope.OneLevel;
searcher.PropertiesToLoad.Add("netbiosname");
searcher.Filter = string.Format("(&(objectcategory=Crossref)(dnsRoot={0})(netBIOSName=*))", dnsDomainName);
SearchResult result = searcher.FindOne();
if (result != null)
{
netbiosDomainName = result.Properties["netbiosname"][0].ToString();
}
return netbiosDomainName;
}
你基本上用“mydomain.com”调用它,并且应该取回netbios域名,例如“MYDOMAIN”(通常)。
马克
答案 1 :(得分:0)
,前缀名称只称为域
<强> 编辑: 强> 那么Environment.UserDomainName呢?
答案 2 :(得分:-1)
据我所知, prefixname 始终是 company.int 的第一个标签(即公司)。