完全修飾されたActive Directoryドメイン名からNETBIOSドメイン名を取得することは、時には面倒な作業です。私は良い答えを見つけたhere。複雑な環境でFQDNを使用してNETBIOSドメイン名を取得する方法
複数のフォレストを持つ環境では、この方法は、PCがクエリしているフォレストにない場合は機能しません。これは、LDAP://RootDSE
がコンピュータのドメインに関する情報を照会するためです。
何人か質問するかもしれません:どうしてこんなに複雑ですか?
ActiveDirectory.Domain.GetComputerDomain().Name;
それともユーザーのドメイン名取得:
Environment.GetEnvironmentVariable("USERDOMAIN");
または
Environment.UserDomainName;
をしかしNETBIOSドメイン名は、完全なものにできるのと同じことで取得された最初のドットの前に名前を使用しますあなたとあなたのコンピュータは異なるドメインまたはフォレストにあるかもしれません!したがって、このアプローチは単純な環境でのみ使用できます。
DJ KRAZE’sソリューションでは、クロスドメインクエリを可能にするために1つの小さな変更のみが必要です。これは信頼関係を前提としています!
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
別の回答として投稿したため、編集リクエストが拒否されました。より多くの担当者を持つ人は、後でそれらをマージする必要があります。 –