从完全限定的 Active Directory 域名获取 NETBIOS 域名有时是一项乏味的任务。我在这里找到了一个很好的答案。
但是,在具有多个林的环境中,如果 PC 不在您正在查询的林中,则此方法将不起作用。这是因为LDAP://RootDSE
将查询计算机域的信息。
有人可能会问:为什么这么复杂?只需在通过以下方式检索到的第一个点之前使用名称:
ActiveDirectory.Domain.GetComputerDomain().Name;
或者只是获取用户的域名:
Environment.GetEnvironmentVariable("USERDOMAIN");
或者
Environment.UserDomainName;
但是 NETBIOS 域名可能完全不同,您或您的计算机可能位于不同的域或林中!所以这种方法只能在简单的环境中使用。
DJ KRAZE 的解决方案只需要稍作修改即可允许跨域查询。这假定了信任关系!
private string GetNetbiosDomainName(string dnsDomainName)
{
string netbiosDomainName = string.Empty;
DirectoryEntry rootDSE = new DirectoryEntry(string.Format("LDAP://{0}/RootDSE",dnsDomainName));
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;
}