Active Directoryデータのプロパティ出力
ユーザやグループなどの属性とその値を出力する
小山 三智男
mitchin
2
アプリケーションの参照設定
• .NETからActive Directoryの色々な情報にアクセスするために
System.DirectoryServicesアセンブリを参照する必要がありま
す。
• ドメインやサイト関連はSystem.D...
3
対象のデータ
管理ツール「Active Directory ユーザとコンピュータ」で管理
する以下のオブジェクト
• ユーザ
• グループ
• コンピュータ
• 組織単位(OU)
• プリンタ
• 共有フォルダ
ADSI のインターフェイス
基本インターフェイスは IADs インターフェイスで、各オブジェ
クトはこのインターフェイスを継承しています。
オブジェクトとそれに対応するインターフェイス
DirectoryEntry.NativeObject ...
5
Windows Server 2008 以上なら
管理ツール「Active Directory ユーザとコンピュータ」で確認
できます。
「表示」メニューの「拡張機能」にチェックを入れます。
属性エディタ
「属性エディタ」タブを開きます。
6
値が設定されているものだけ表示するには
「フィルタ」ボタンをクリックして「値を持つ属性のみを表示」
にチェックを入れます。(フィルタ設定は維持されます)
7
属性の割り出し
属性の名前とその値から設定項目を割り出します。
8
プログラムから確認するには
DirectoryEntry.Properties プロパティ(PropertyCollection
クラス)からプロパティ(属性)とその値を列挙して取得します。
未設定の属性や通常取得できないオプションの属性を取得...
属性の出力サンプル(VB)
Private Sub OutputProperties(entry As DirectoryEntry, filePath As
String)
Dim props = entry.Properties.Prope...
属性の出力サンプル(C#)
private void OutputProperties(DirectoryEntry entry, string filePath) {
var props = entry.Properties.Property...
オプションの属性の出力サンプル(VB)
Private Sub OutputOptionalProperties(
entry As DirectoryEntry, filePath As String)
Dim adsi = DirectCa...
オプションの属性の出力サンプル(VB)
If TypeOf val Is Byte() Then 'バイト配列の時
Dim bstr = BitConverter.ToString(DirectCast(val, Byte()))
writer...
オプションの属性の出力サンプル(C#)
private void OutputOptionalProperties(
DirectoryEntry entry, string filePath) {
var adsi = (IADs)entry...
オプションの属性の出力サンプル(C#)
if (val is byte[]) { //バイト配列の時
var bstr = BitConverter.ToString((byte[])val);
writer.WriteLine("{0}:{1...
バイト配列の値取得サンプル(VB)
Private Function GetByteValue(
name As String, value As Byte()) As String
If name.Equals("objectSid") Th...
バイト配列の値取得サンプル(C#)
private string GetByteValue(string name, byte[] value)
{
if (name.Equals("objectSid"))
{
return new Secu...
属性の出力結果
18
オプションの属性の出力結果
19
詳細や関連情報はブログ等で
.NETからActive Directoryにアクセス ~ユーザ情報の取得と表示~
http://www.slideshare.net/mitchin227/display-user
.NETからActive Dir...
Upcoming SlideShare
Loading in …5
×

Active Directoryデータのプロパティ出力(Output Properties)

1,811 views
1,552 views

Published on

ユーザやグループなどの属性とその値を出力

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,811
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
6
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Active Directoryデータのプロパティ出力(Output Properties)

  1. 1. Active Directoryデータのプロパティ出力 ユーザやグループなどの属性とその値を出力する 小山 三智男 mitchin
  2. 2. 2 アプリケーションの参照設定 • .NETからActive Directoryの色々な情報にアクセスするために System.DirectoryServicesアセンブリを参照する必要がありま す。 • ドメインやサイト関連はSystem.DirectoryServices. ActiveDirectory名前空間にそれらを表すクラスがあり、 Active Directoryの管理タスクを自動化するために使用されま す。 • Active Directory内のデータにアクセスするために使用される のは System.DirectoryServices名前空間で、オブジェクトを カプセル化する DirectoryEntryクラスやクエリを実行する DirectorySearcherクラスなどがあります。 • ADSI(Active Directory Services Interfaces)を使用してネイ ティブなオブジェクトを扱う場合は Active DS Type Library を参照する必要があります。
  3. 3. 3 対象のデータ 管理ツール「Active Directory ユーザとコンピュータ」で管理 する以下のオブジェクト • ユーザ • グループ • コンピュータ • 組織単位(OU) • プリンタ • 共有フォルダ
  4. 4. ADSI のインターフェイス 基本インターフェイスは IADs インターフェイスで、各オブジェ クトはこのインターフェイスを継承しています。 オブジェクトとそれに対応するインターフェイス DirectoryEntry.NativeObject プロパティの値を上記インター フェイスにキャストできます。 4 ユーザ IADsUser グループ IADsGroup コンピュータ IADsComputer 組織単位(OU) IADsOU プリンタ IADsPrintQueue 共有フォルダ
  5. 5. 5 Windows Server 2008 以上なら 管理ツール「Active Directory ユーザとコンピュータ」で確認 できます。 「表示」メニューの「拡張機能」にチェックを入れます。
  6. 6. 属性エディタ 「属性エディタ」タブを開きます。 6
  7. 7. 値が設定されているものだけ表示するには 「フィルタ」ボタンをクリックして「値を持つ属性のみを表示」 にチェックを入れます。(フィルタ設定は維持されます) 7
  8. 8. 属性の割り出し 属性の名前とその値から設定項目を割り出します。 8
  9. 9. プログラムから確認するには DirectoryEntry.Properties プロパティ(PropertyCollection クラス)からプロパティ(属性)とその値を列挙して取得します。 未設定の属性や通常取得できないオプションの属性を取得するに は、スキーマ オブジェクト(SchemaEntry プロパティ)のネイ ティブ ADSI オブジェクト(IADsClass)の OptionalProperties からプロパティ(属性)を列挙して、ディレクトリ ストアから サポートされているプロパティの値を読み込んで取得します。 サンプルコードは次の名前空間をインポートしています。 • ActiveDs • System.IO • System.Security.Principal • System.Text 9
  10. 10. 属性の出力サンプル(VB) Private Sub OutputProperties(entry As DirectoryEntry, filePath As String) Dim props = entry.Properties.PropertyNames.Cast( Of String)().OrderBy(Function(s) s).ToList() 'プロパティ名のリス ト Using writer As New StreamWriter(filePath, False, Encoding.UTF8) For Each pname In props 'プロパティ数分 Dim val = entry.Properties.Item(pname).Value If TypeOf val Is Byte() Then 'バイト配列の時 Dim pstr = GetByteValue(pname, DirectCast(val, Byte())) '値取 得 writer.WriteLine("{0}:{1}", pname, pstr) Else 'バイト配列以外の時 For Each pval In entry.Properties.Item(pname) '値数分 writer.WriteLine("{0}:{1}", pname, pval) Next End If Next End Using 10
  11. 11. 属性の出力サンプル(C#) private void OutputProperties(DirectoryEntry entry, string filePath) { var props = entry.Properties.PropertyNames.Cast<string>().OrderBy( s => s).ToList(); //プロパティ名のリスト using (var writer = new StreamWriter(filePath, false, Encoding.UTF8)) { foreach (var pname in props) { //プロパティ数分 var val = entry.Properties[pname].Value; if (val is byte[]) { //バイト配列の時 var pstr = GetByteValue(pname, (byte[])val); //値取得 writer.WriteLine("{0}:{1}", pname, pstr); } else { //バイト配列以外の時 foreach (var pval in entry.Properties[pname]) { //値数分 writer.WriteLine("{0}:{1}", pname, pval) } } } } } 11
  12. 12. オプションの属性の出力サンプル(VB) Private Sub OutputOptionalProperties( entry As DirectoryEntry, filePath As String) Dim adsi = DirectCast(entry.NativeObject, IADs) 'ADSI オブジェクト Dim schema = DirectCast(entry.SchemaEntry.NativeObject, IADsClass) Dim val As Object Using writer As New StreamWriter(filePath, False, Encoding.UTF8) 'プロパティの値を読込 adsi.GetInfoEx(DirectCast(schema.OptionalProperties, Object()), 0) For Each pname As String In DirectCast(schema.OptionalProperties, IEnumerable) 'オプションのプロパティ数分 Try val = adsi.GetEx(pname) Catch writer.WriteLine("{0}:<未設定>", pname) Continue For End Try 12
  13. 13. オプションの属性の出力サンプル(VB) If TypeOf val Is Byte() Then 'バイト配列の時 Dim bstr = BitConverter.ToString(DirectCast(val, Byte())) writer.WriteLine("{0}:{1}", pname, bstr) Else 'バイト配列以外の時 For Each pval In DirectCast(val, IEnumerable) '値数分 If TypeOf pval Is Byte() Then 'バイト配列の時 '値取得 Dim pstr = GetByteValue(pname, DirectCast(pval, Byte())) writer.WriteLine("{0}:{1}", pname, pstr) Else 'バイト配列以外の時 writer.WriteLine("{0}:{1}", pname, pval) End If Next End If Next End Using End Sub 13
  14. 14. オプションの属性の出力サンプル(C#) private void OutputOptionalProperties( DirectoryEntry entry, string filePath) { var adsi = (IADs)entry.NativeObject; //ADSI オブジェクト var schema = (IADs)entry.SchemaEntry.NativeObject; object val; using (var writer = new StreamWriter(filePath, false, Encoding.UTF8)) { //プロパティの値を読込 adsi.GetInfoEx((object[])schema.OptionalProperties, 0); //オプションのプロパティ数分 foreach (string pname in (IEnumerable)schema.OptionalProperties) { try { val = adsi.GetEx(pname); } catch { writer.WriteLine("{0}:<未設定>", pname); continue; } 14
  15. 15. オプションの属性の出力サンプル(C#) if (val is byte[]) { //バイト配列の時 var bstr = BitConverter.ToString((byte[])val); writer.WriteLine("{0}:{1}", pname, bstr); } else { //バイト配列以外の時 foreach (var pval in (IEnumerable)val) { //値数分 if (pval is byte[]) { //バイト配列の時 var pstr = GetByteValue(pname, (byte[])val); //値取得 writer.WriteLine("{0}:{1}", pname, pstr); } else { //バイト配列以外の時 writer.WriteLine("{0}:{1}", pname, pval) } } } } } } 15
  16. 16. バイト配列の値取得サンプル(VB) Private Function GetByteValue( name As String, value As Byte()) As String If name.Equals("objectSid") Then Return New SecurityIdentifier(value, 0).ToString() ElseIf name.Equals("objectGUID") Then Return New Guid(value).ToString() Else Return BitConverter.ToString(value) End If End Function 16
  17. 17. バイト配列の値取得サンプル(C#) private string GetByteValue(string name, byte[] value) { if (name.Equals("objectSid")) { return new SecurityIdentifier(value, 0).ToString(); } else if (name.Equals("objectGUID")) { return new Guid(value).ToString(); } else { return BitConverter.ToString(value); } } 17
  18. 18. 属性の出力結果 18
  19. 19. オプションの属性の出力結果 19
  20. 20. 詳細や関連情報はブログ等で .NETからActive Directoryにアクセス ~ユーザ情報の取得と表示~ http://www.slideshare.net/mitchin227/display-user .NETからActive Directoryデータにアクセス ~グループ情報を表示する~ http://www.slideshare.net/mitchin227/display-group ユーザやグループの検索 http://blogs.wankuma.com/mitchin/archive/2013/06/26/327958.aspx ネイティブ ADSI オブジェクト http://blogs.wankuma.com/mitchin/archive/2013/07/01/327981.aspx ドメインユーザのプロパティ画面の項目と属性の対応(全般タブ) http://blogs.wankuma.com/mitchin/archive/2013/07/21/328010.aspx ドメインユーザのプロパティ画面の項目と属性の対応(所属するグループタブ) http://blogs.wankuma.com/mitchin/archive/2013/08/19/328068.aspx Active Directoryデータのプロパティ出力 http://blogs.wankuma.com/mitchin/archive/2013/09/19/328123.aspx http://blogs.wankuma.com/mitchin/archive/2013/09/20/328126.aspx 20

×