3月
27
そのものズバリの記事が見つからなくて困ってたけど、実は以下のように単純にできるらしい(^^;
using System; using System.DirectoryServices; using System.DirectoryServices.ActiveDirectory; namespace DomainInfo { class Program { static void Main(string[] args) { Domain domain; Domain root; if (args.Length == 0) domain = Domain.GetCurrentDomain(); else domain = Domain.GetDomain(new DirectoryContext(DirectoryContextType.Domain, args[0])); Console.WriteLine("Domain Name = " + domain.Name); Console.WriteLine("Domain Mode = " + domain.DomainMode); for (root = domain; root.Parent != null; root = root.Parent) /* NOTHING */; Console.WriteLine("Root Domain Name = " + root.Name); Console.WriteLine("Forest Name = " + domain.Forest.Name); Console.WriteLine("Forest Mode = " + domain.Forest.ForestMode); } } }
出力例
D:\> DomainInfo Domain Name = umead.local Domain Mode = Windows2003Domain Root Domain Name = umead.local Forest Name = umead.local Forest Mode = Windows2003Forest D:\> DomainInfo umead.local Domain Name = umead.local Domain Mode = Windows2003Domain Root Domain Name = umead.local Forest Name = umead.local Forest Mode = Windows2003Forest D:\> DomainInfo UMESUB Domain Name = umesub.umead.local Domain Mode = Windows2003Domain Root Domain Name = umead.local Forest Name = umead.local Forest Mode = Windows2003Forest D:\> DomainInfo NON-EXISTENT-DOMAIN ハンドルされていない例外: System.DirectoryServices.ActiveDirectory.ActiveDirectoryObjectNotFoundException: 指定されたドメインが存在しないか、またはアクセス不能です。 場所 System.DirectoryServices.ActiveDirectory.Domain.GetDomain(DirectoryContext context) 場所 DomainInfo.Program.Main(String[] args)
ただ、細かいことを言うと、ホントにドメインNetBIOS名(NTドメイン名)を指定していることになっているのか、それともドメインDNS名の左端を指定していることになっているのかは分からない。両者は普通同じであるが、違うものを設定することもできる。そして、違うものが設定されている場合に、ドメインDNS名からドメインNetBIOS名を取得する方法は見つけられていない。
サブドメイン名(ドメインDNS名の左端になる名前)を長ーいものにしてドメインDNS名の左端とドメインNetBIOS名が異なる状態にして検証した結果、ドメインNetBIOS名を指定すると Domain
オブジェクトを取得でき、ドメインDNS名の左端を指定すると Domain
オブジェクトを取得できない(ActiveDirectoryObjectNotFoundException
が飛んでくる)、という結果になった。ドメインDNS名全体を指定すると Domain
オブジェクトを取得できるのは、まあ当然。
no comment untill now