ドメインユーザは非常に多くのプロパティ(属性)を持ってます。
Active Directory 内のオブジェクトの検索指定の最後にちょっと書きましたが、ドメインコントローラが Windows server 2008 だと管理ツール「Active Directory ユーザとコンピュータ」から確認することができます。
この図はユーザのプロパティで「属性エディタ」タブを開いたとこです。スクロールバーの小ささからしてその多さが判ると思います。
右下にフィルタボタンがあるので、設定されてるものだけに絞ることもできます。
色んなタブの項目を設定して、属性エディタで値を確認することで、どの属性がどの項目に対応してるのか確認できます。
プログラムからだと DirectoryEntry.Properties でプロパティ(属性)名を指定してそのプロパティを取得します。 ですが、これで取得できるプロパティは設定されてる項目の一部だけです。
ひとまずこのプロパティに保持されてる属性名とその値をテキストファイルに出力するサンプルです。(Windowsアプリ用)
VB
Private Sub OutputProperties(entry As DirectoryEntry)
Dim folderName = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
Dim fileName = String.Format("{0}Properties.txt", entry.Properties.Item("cn").Value)
Dim props = entry.Properties.PropertyNames.Cast(Of String)().OrderBy(Function(s) s).ToList()
Using writer As New StreamWriter(Path.Combine(folderName, fileName), False, Encoding.UTF8)
For Each pname In props
Dim val = entry.Properties.Item(pname).Value
If TypeOf val Is Byte() Then
Dim bstr = BitConverter.ToString(DirectCast(val, Byte()))
writer.WriteLine("{0}:{1}", pname, bstr)
Else
For Each pval In entry.Properties.Item(pname)
writer.WriteLine("{0}:{1}", pname, pval)
Next
End If
Next
End Using
MessageBox.Show(Me, String.Format("{0} に '{1}' を作成しました。", folderName, fileName), "プロパティ出力")
End Sub
C#
private void OutputProperties(DirectoryEntry entry)
{
var folderName = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
var fileName = String.Format("{0}Properties.txt", entry.Properties["cn"].Value);
var props = entry.Properties.PropertyNames.Cast<string>().OrderBy(s => s).ToList();
using (var writer = new StreamWriter(System.IO.Path.Combine(folderName, fileName), false, Encoding.UTF8))
{
foreach (var pname in props)
{
var val = entry.Properties[pname].Value;
if (val is byte[])
{
var bstr = BitConverter.ToString((byte[])val);
writer.WriteLine("{0}:{1}", pname, bstr);
}
else
{
foreach (var pval in entry.Properties[pname])
{
writer.WriteLine("{0}:{1}", pname, pval);
}
}
}
}
MessageBox.Show(this, String.Format("{0} に '{1}' を作成しました。", folderName, fileName), "プロパティ出力")
}