[C#] DirectorySearcherのPropertiesToLoadでプロパティを指定する方法

C#のDirectorySearcherクラスを使用してActive Directoryから情報を取得する際、PropertiesToLoadプロパティを利用して取得したい属性を指定できます。

PropertiesToLoadStringCollectionで、取得したいプロパティ名を文字列として追加します。

例えば、ユーザーの displayNamemail 属性を取得したい場合、PropertiesToLoad.Add("displayName")PropertiesToLoad.Add("mail")を使用します。

これにより、検索結果から指定したプロパティのみがロードされ、効率的なデータ取得が可能になります。

この記事でわかること
  • PropertiesToLoadの基本的な役割
  • プロパティの指定方法と注意点
  • ユーザー情報の取得方法
  • グループやOUの情報取得方法
  • 効率的なデータ取得の重要性

目次から探す

PropertiesToLoadの役割

PropertiesToLoadとは

PropertiesToLoadは、C#のDirectorySearcherクラスにおいて、LDAP(Lightweight Directory Access Protocol)検索を行う際に取得したいプロパティを指定するためのプロパティです。

これにより、必要な情報だけを効率的に取得することができます。

PropertiesToLoadに指定したプロパティは、検索結果に含まれる属性として返されます。

なぜPropertiesToLoadを使用するのか

PropertiesToLoadを使用する理由は、以下の通りです。

  • パフォーマンスの向上: 必要なプロパティのみを指定することで、データの転送量を減らし、検索のパフォーマンスを向上させることができます。
  • メモリの節約: 不要なデータを取得しないため、メモリの使用量を抑えることができます。
  • 可読性の向上: 取得するデータが明確になるため、コードの可読性が向上します。

PropertiesToLoadの利点

PropertiesToLoadを使用することによる利点は、以下のようにまとめられます。

スクロールできます
利点説明
パフォーマンス向上必要なデータのみを取得することで、処理が速くなる。
メモリ効率不要なデータを排除することで、メモリ使用量が減少。
コードの明確化取得するプロパティが明示的になり、理解しやすくなる。

これらの利点により、PropertiesToLoadはLDAP検索を行う際に非常に重要な役割を果たします。

PropertiesToLoadの使用方法

プロパティの指定方法

PropertiesToLoadにプロパティを指定するには、DirectorySearcherクラスのインスタンスを作成し、そのPropertiesToLoadプロパティに取得したい属性名を追加します。

以下は、ユーザーの表示名を取得する例です。

using System.DirectoryServices;
partial class MyForm
{
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        DirectorySearcher searcher = new DirectorySearcher();
        searcher.Filter = "(objectClass=user)"; // ユーザーオブジェクトを検索
        searcher.PropertiesToLoad.Add("displayName"); // 表示名を指定
        SearchResult result = searcher.FindOne(); // 検索を実行
        if (result != null)
        {
            string displayName = result.Properties["displayName"][0].ToString(); // 表示名を取得
            // 取得した表示名を使用する処理
        }
    }
}

このコードでは、PropertiesToLoad"displayName"を追加することで、ユーザーの表示名を取得しています。

複数プロパティの指定

複数のプロパティを指定する場合も、PropertiesToLoadに追加するだけで簡単に実現できます。

以下は、表示名とメールアドレスを同時に取得する例です。

using System.DirectoryServices;
partial class MyForm
{
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        DirectorySearcher searcher = new DirectorySearcher();
        searcher.Filter = "(objectClass=user)"; // ユーザーオブジェクトを検索
        searcher.PropertiesToLoad.Add("displayName"); // 表示名を指定
        searcher.PropertiesToLoad.Add("mail"); // メールアドレスを指定
        SearchResult result = searcher.FindOne(); // 検索を実行
        if (result != null)
        {
            string displayName = result.Properties["displayName"][0].ToString(); // 表示名を取得
            string email = result.Properties["mail"][0].ToString(); // メールアドレスを取得
            // 取得した情報を使用する処理
        }
    }
}

このように、PropertiesToLoadに複数のプロパティを追加することで、必要な情報を一度の検索で取得できます。

プロパティ指定の注意点

PropertiesToLoadを使用する際には、以下の点に注意が必要です。

  • 存在しないプロパティの指定: 指定したプロパティが存在しない場合、SearchResultPropertiesコレクションにはそのプロパティが含まれません。

これにより、NullReferenceExceptionが発生する可能性があります。

  • プロパティの型: 取得したプロパティの型が異なる場合があるため、適切な型にキャストする必要があります。

例えば、string型として取得する場合は、ToString()メソッドを使用します。

  • パフォーマンスの影響: 取得するプロパティが多すぎると、パフォーマンスに影響を与える可能性があります。

必要なプロパティのみを指定することが推奨されます。

これらの注意点を考慮しながら、PropertiesToLoadを効果的に活用しましょう。

実践例:ユーザー情報の取得

ユーザーの表示名を取得する

ユーザーの表示名を取得するためには、DirectorySearcherを使用して、PropertiesToLoad"displayName"を指定します。

以下のコードは、ユーザーの表示名を取得する例です。

using System.DirectoryServices;
partial class MyForm
{
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        DirectorySearcher searcher = new DirectorySearcher();
        searcher.Filter = "(objectClass=user)"; // ユーザーオブジェクトを検索
        searcher.PropertiesToLoad.Add("displayName"); // 表示名を指定
        SearchResult result = searcher.FindOne(); // 検索を実行
        if (result != null)
        {
            string displayName = result.Properties["displayName"][0].ToString(); // 表示名を取得
            // 取得した表示名を使用する処理
        }
    }
}

このコードを実行すると、指定したユーザーの表示名が取得されます。

メールアドレスを取得する

メールアドレスを取得するには、PropertiesToLoad"mail"を追加します。

以下は、ユーザーのメールアドレスを取得する例です。

using System.DirectoryServices;
partial class MyForm
{
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        DirectorySearcher searcher = new DirectorySearcher();
        searcher.Filter = "(objectClass=user)"; // ユーザーオブジェクトを検索
        searcher.PropertiesToLoad.Add("mail"); // メールアドレスを指定
        SearchResult result = searcher.FindOne(); // 検索を実行
        if (result != null)
        {
            string email = result.Properties["mail"][0].ToString(); // メールアドレスを取得
            // 取得したメールアドレスを使用する処理
        }
    }
}

このコードを実行することで、指定したユーザーのメールアドレスが取得されます。

電話番号を取得する

電話番号を取得するには、PropertiesToLoad"telephoneNumber"を追加します。

以下は、ユーザーの電話番号を取得する例です。

using System.DirectoryServices;
partial class MyForm
{
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        DirectorySearcher searcher = new DirectorySearcher();
        searcher.Filter = "(objectClass=user)"; // ユーザーオブジェクトを検索
        searcher.PropertiesToLoad.Add("telephoneNumber"); // 電話番号を指定
        SearchResult result = searcher.FindOne(); // 検索を実行
        if (result != null)
        {
            string phoneNumber = result.Properties["telephoneNumber"][0].ToString(); // 電話番号を取得
            // 取得した電話番号を使用する処理
        }
    }
}

このコードを実行すると、指定したユーザーの電話番号が取得されます。

これらの実践例を通じて、PropertiesToLoadを活用してユーザー情報を効率的に取得する方法が理解できるでしょう。

応用例

グループ情報の取得

グループ情報を取得するには、DirectorySearcherを使用して、PropertiesToLoadにグループに関連するプロパティを指定します。

以下のコードは、グループ名とメンバーを取得する例です。

using System.DirectoryServices;
partial class MyForm
{
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        DirectorySearcher searcher = new DirectorySearcher();
        searcher.Filter = "(objectClass=group)"; // グループオブジェクトを検索
        searcher.PropertiesToLoad.Add("cn"); // グループ名を指定
        searcher.PropertiesToLoad.Add("member"); // メンバーを指定
        SearchResult result = searcher.FindOne(); // 検索を実行
        if (result != null)
        {
            string groupName = result.Properties["cn"][0].ToString(); // グループ名を取得
            string[] members = result.Properties["member"].OfType<string>().ToArray(); // メンバーを取得
            // 取得したグループ名とメンバーを使用する処理
        }
    }
}

このコードを実行すると、指定したグループの名前とそのメンバーが取得されます。

組織単位の情報取得

組織単位(OU)の情報を取得するには、DirectorySearcherを使用して、PropertiesToLoadにOUに関連するプロパティを指定します。

以下は、OUの名前とそのメンバーを取得する例です。

using System.DirectoryServices;
partial class MyForm
{
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        DirectorySearcher searcher = new DirectorySearcher();
        searcher.Filter = "(objectClass=organizationalUnit)"; // 組織単位オブジェクトを検索
        searcher.PropertiesToLoad.Add("ou"); // 組織単位名を指定
        searcher.PropertiesToLoad.Add("member"); // メンバーを指定
        SearchResult result = searcher.FindOne(); // 検索を実行
        if (result != null)
        {
            string organizationalUnitName = result.Properties["ou"][0].ToString(); // 組織単位名を取得
            string[] members = result.Properties["member"].OfType<string>().ToArray(); // メンバーを取得
            // 取得した組織単位名とメンバーを使用する処理
        }
    }
}

このコードを実行することで、指定した組織単位の名前とそのメンバーが取得されます。

カスタム属性の取得

LDAPでは、カスタム属性を定義することができます。

これらのカスタム属性を取得するには、PropertiesToLoadにカスタム属性名を指定します。

以下は、カスタム属性customAttributeを取得する例です。

using System.DirectoryServices;
partial class MyForm
{
    public MyForm()
    {
        InitializeComponent(); // フォームの初期化
        DirectorySearcher searcher = new DirectorySearcher();
        searcher.Filter = "(objectClass=user)"; // ユーザーオブジェクトを検索
        searcher.PropertiesToLoad.Add("customAttribute"); // カスタム属性を指定
        SearchResult result = searcher.FindOne(); // 検索を実行
        if (result != null)
        {
            string customAttributeValue = result.Properties["customAttribute"][0].ToString(); // カスタム属性を取得
            // 取得したカスタム属性を使用する処理
        }
    }
}

このコードを実行すると、指定したユーザーのカスタム属性が取得されます。

これらの応用例を通じて、PropertiesToLoadを活用してさまざまな情報を効率的に取得する方法が理解できるでしょう。

よくある質問

PropertiesToLoadで指定しないとどうなる?

PropertiesToLoadでプロパティを指定しない場合、DirectorySearcherはデフォルトで全てのプロパティを取得しようとします。

これにより、以下のような影響があります。

  • パフォーマンスの低下: 不要なデータも取得するため、検索処理が遅くなる可能性があります。
  • メモリの消費: 取得するデータ量が増えるため、メモリ使用量が増加します。
  • 結果の解析が難しくなる: 取得するプロパティが多すぎると、必要な情報を見つけるのが難しくなります。

取得できるプロパティの一覧はどこで確認できる?

取得できるプロパティの一覧は、以下の方法で確認できます。

  • Active Directory Schema: Active Directoryのスキーマを参照することで、利用可能な属性の一覧を確認できます。
  • Microsoftの公式ドキュメント: Microsoftの公式ドキュメントには、LDAP属性の詳細な情報が記載されています。
  • LDAPブラウザツール: LDAPブラウザを使用して、特定のオブジェクトクラスに関連する属性を直接確認することも可能です。

PropertiesToLoadの指定が多すぎるとどうなる?

PropertiesToLoadに指定するプロパティが多すぎると、以下のような問題が発生する可能性があります。

  • パフォーマンスの低下: 取得するプロパティが多いと、検索処理にかかる時間が増加します。
  • メモリの過剰消費: 不要なデータを取得することで、メモリ使用量が増加し、アプリケーションのパフォーマンスに影響を与えることがあります。
  • エラーの発生: 一部のプロパティが存在しない場合、NullReferenceExceptionが発生する可能性があります。

これにより、プログラムが正常に動作しなくなることがあります。

これらの理由から、PropertiesToLoadには必要なプロパティのみを指定することが推奨されます。

まとめ

この記事では、C#のDirectorySearcherクラスにおけるPropertiesToLoadの役割や使用方法、実践例、応用例について詳しく解説しました。

特に、必要なプロパティを指定することで、検索のパフォーマンスを向上させる方法や、さまざまな情報を効率的に取得する手法に焦点を当てました。

これを機に、実際のプロジェクトにおいてPropertiesToLoadを活用し、より効率的なデータ取得を実現してみてください。

当サイトはリンクフリーです。出典元を明記していただければ、ご自由に引用していただいて構いません。

関連カテゴリーから探す

  • URLをコピーしました!
目次から探す