そのものズバリの記事が見つからなくて困ってたけど、実は以下のように単純にできるらしい(^^;

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 オブジェクトを取得できるのは、まあ当然。

Trackback

no comment untill now

Add your comment now