Your SlideShare is downloading. ×
Active Directoryデータのプロパティ出力(Output Properties)
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

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

921
views

Published on

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

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

Published in: Technology

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
921
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
4
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Active Directoryデータのプロパティ出力 ユーザやグループなどの属性とその値を出力する 小山 三智男 mitchin
  • 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 対象のデータ 管理ツール「Active Directory ユーザとコンピュータ」で管理 する以下のオブジェクト • ユーザ • グループ • コンピュータ • 組織単位(OU) • プリンタ • 共有フォルダ
  • 4. ADSI のインターフェイス 基本インターフェイスは IADs インターフェイスで、各オブジェ クトはこのインターフェイスを継承しています。 オブジェクトとそれに対応するインターフェイス DirectoryEntry.NativeObject プロパティの値を上記インター フェイスにキャストできます。 4 ユーザ IADsUser グループ IADsGroup コンピュータ IADsComputer 組織単位(OU) IADsOU プリンタ IADsPrintQueue 共有フォルダ
  • 5. 5 Windows Server 2008 以上なら 管理ツール「Active Directory ユーザとコンピュータ」で確認 できます。 「表示」メニューの「拡張機能」にチェックを入れます。
  • 6. 属性エディタ 「属性エディタ」タブを開きます。 6
  • 7. 値が設定されているものだけ表示するには 「フィルタ」ボタンをクリックして「値を持つ属性のみを表示」 にチェックを入れます。(フィルタ設定は維持されます) 7
  • 8. 属性の割り出し 属性の名前とその値から設定項目を割り出します。 8
  • 9. プログラムから確認するには DirectoryEntry.Properties プロパティ(PropertyCollection クラス)からプロパティ(属性)とその値を列挙して取得します。 未設定の属性や通常取得できないオプションの属性を取得するに は、スキーマ オブジェクト(SchemaEntry プロパティ)のネイ ティブ ADSI オブジェクト(IADsClass)の OptionalProperties からプロパティ(属性)を列挙して、ディレクトリ ストアから サポートされているプロパティの値を読み込んで取得します。 サンプルコードは次の名前空間をインポートしています。 • ActiveDs • System.IO • System.Security.Principal • System.Text 9
  • 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. 属性の出力サンプル(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. オプションの属性の出力サンプル(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. オプションの属性の出力サンプル(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. オプションの属性の出力サンプル(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. オプションの属性の出力サンプル(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. バイト配列の値取得サンプル(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. バイト配列の値取得サンプル(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
  • 19. オプションの属性の出力結果 19
  • 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