検索して取得したユーザの DirectoryEntry オブジェクトから姓と名を取得するには次のように書きます。
VB
Dim lastName = DirectCast(DirectoryEntry.Properties.Item("sn").Value, String)
Dim firstName = DirectCast(DirectoryEntry.Properties.Item("givenName").Value, String)
C#
var lastName = (string)DirectoryEntry.Properties["sn"].Value;
var firstName = (string)DirectoryEntry.Properties["givenName"].Value;
プロパティ名(属性名)が 姓は「sn」、名は「givenName」です。
ADSI(Active Directory Services Interfaces)を使うとネイティブなユーザ(IADsUser)オブジェクトとして扱えるので次のように書くことができます。
VB
Dim lastName = IADsUser.LastName
Dim firstName = IADsUser.FirstName
C#
var lastName = IADsUser.LastName;
var firstName = IADsUser.FirstName;
ADSI を使う場合は参照の追加で「COM」タブから「Active DS Type Library」を選びます。
どのように ADSI のオブジェクトを取得するかというと、DirectoryEntry.NativeObject プロパティ(Object 型)を IADsUser にキャストするだけです。
DirectoryEntry がグループなら IADsGroup に、コンピュータなら IADsComputer に、組織単位(OU)なら IADsOU に、プリンタなら IADsPrintQueue にキャストできます。
これらのインターフェイスの基本インターフェイスが IADs インターフェイスです。
サンプルアプリではWindowsアプリもWebアプリもユーザやグループの情報を画面に表示するので、コントロールにバインドできるようにライブラリ側にインターフェイスを定義し、それを実装したクラスを用意します。(別途書くかソースを公開します。)
また、扱う Directory オブジェクトの種類を表す列挙体「CategoryType」をライブラリ側の名前空間直下に定義します。
メンバは次の7つです。
User 'ユーザ
Group 'グループ
Computer 'コンピュータ
OrganizationalUnit '組織単位(OU)
PrintQueue 'プリンタ
Volume '共有フォルダ
ForeignSecurityPrincipal '外部のセキュリティ プリンシパル