從完全限定的Active Directory域名獲取NETBIOS域名有時是一項繁瑣的任務。我找到了一個很好的答案here。如何在複雜環境中使用FQDN獲取NETBIOS域名
在具有多個森林的環境中,如果PC不在您要查詢的森林中,則此方法無效。這是因爲LDAP://RootDSE
將查詢計算機域的信息。
有人可能會問:爲什麼這麼複雜?
ActiveDirectory.Domain.GetComputerDomain().Name;
或者只是得到了用戶的域名:
Environment.GetEnvironmentVariable("USERDOMAIN");
或
Environment.UserDomainName;
但NETBIOS域名可以是一些完全只是檢索到的第一個點之前使用的名稱不同的,你或你的電腦可能在不同的域名或森林!所以這種方法僅適用於簡單的環境。
DJ KRAZE’s解決方案只需要一個小的修改來允許跨域查詢。這假設了一種信任關係!
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;
}
你應該在Q&A形式,或寫這個(可能)您改進的答案應該與原始問題一致。 –
我的編輯請求被拒絕,因爲「原始帖子中的編輯變化太大」 – Daro
將其作爲單獨的答案發布。有更多代表的人應該可以在稍後合併它們。 –