前々回、Active Directory のオブジェクトにアクセスするための静的メソッド・プロパティを提供するクラスを書きました。
現時点では次のメンバを公開してます。
プロパティ
‘ドメインに接続できるかどうかを取得
VB Public Shared ReadOnly Property CanConnectDomain As Boolean
C# public static bool CanConnectDomain
‘Active Directory ドメイン名を取得
VB Public Shared ReadOnly Property DomainName As String
C# public static string DomainName
‘アプリケーションを実行しているユーザがドメインにログオンしているかどうかを取得
VB Public Shared ReadOnly Property IsLogonDomain As Boolean
C# public static bool IsLogonDomain
‘ルートの LDAP パスを取得
VB Public Shared ReadOnly Property LdapRootPath As String
C# public static string LdapRootPath
メソッド
‘ドメインを取得
VB Public Shared Function GetDomain() As Domain
C# public static Domain GetDomain()
4つのプロパティは、値が設定されていない時に値を設定するメソッドを呼び出して、内部で GetDomain メソッドを呼び出して、戻り値の Domain オブジェクトを基に値を設定してます。
DomainName プロパティは Domain オブジェクトの Name プロパティの値を保持してます。
LdapRootPath プロパティは次の値を保持してます。
String.Format("LDAP://DC={0}", DomainName.Replace(".", ",DC="))
Active Directory ドメイン名が ‘virtual.proceed.local’ とすると、プロパティ値は ‘LDAP://DC=virtual,DC=proceed,DC=local’になります。
このプロパティはドメイン内のユーザやグループなどを検索する時に必要になります。
ローカルログオンしてる & Domain に接続できない場合は次の値を保持してます。(ローカルのユーザやグループを検索する想定)
String.Format("WinNT://{0}", Environment.MachineName)
IsLogonDomain プロパティは Domain オブジェクトは見ないで次の値を保持してます。
String.Compare(Environment.MachineName, Environment.UserDomainName, True) <> 0
ローカルログオンしてる時は MachineName プロパティも UserDomainName プロパティもコンピュータ名になるので False になります。