1

ADを検索する方法を理解しましたが、検索結果を取得するには、検索が正確である必要があります。正確に言うことはできません。問題は、電話番号に基づいてユーザーを検索する必要があることです。電話番号は、入力する人と同じくらい多くの形式で書き込むことができます。私の入力は常にMSISDNです。つまり、数字だけで、間にスペースや余分な文字はありません。ADのフィールドはそれほど単純ではありません。

すべてのユーザーを取得せずにそのような番号を検索し、ソフトウェアでスキャンを実行するにはどうすればよいですか。

たとえば、「mobile」フィールドと「telephoneNumber」フィールドを見ています。

ADの番号は、たとえば「+45 12 34 56 78」または「(555)1234」である可能性があります。後者は有効なMSISDNとしてはほとんど適格ではありませんが、考え方は同じで、コンピューターから見たあらゆる種類の狂気です。視点。すべてのユーザーを検索すると、数字以外のすべてを削除するだけでMSISDNを生成できますが、番号を見つける必要があるたびにAD全体をダンプし始めれば、エンタープライズが満足できるとは思えません。

サンプルコード:

        String domain = "example.com";
        String msisdn = "4512345678";

        // create your domain context
        PrincipalContext ctx = new PrincipalContext(ContextType.Domain, domain);

        DirectorySearcher ds = new DirectorySearcher(ctx.ConnectedServer);

        ds.Filter = String.Format("(mobile={0})", msisdn);

        ds.PropertiesToLoad.Add("cn");
        ds.PropertiesToLoad.Add("sn");
        ds.PropertiesToLoad.Add("name");
        ds.PropertiesToLoad.Add("mail");
        ds.PropertiesToLoad.Add("mobile");
        ds.PropertiesToLoad.Add("telephoneNumber");

        foreach (SearchResult de in ds.FindAll())
        {
            Console.WriteLine("");
            foreach (String key in de.Properties.PropertyNames)
            {

                Console.WriteLine("{0}: {1}", key.PadRight(30, '.'), de.Properties[key].Count);
                int i = 1;
                foreach (String prop in de.Properties[key])
                {
                    Console.WriteLine("{0}: {1}", (String.Format("[{0}]", (i++)).PadLeft(30, ' ')), prop);
                }
            }
            Console.WriteLine("");
        }
4

1 に答える 1

2

フィルターにワイルドカードを入れることができます。名前を検索して電話番号を出力する同様のプログラムがあります。

私は次のようにフィルタリングします:

static SearchResultCollection GetUsers(string target)
    {
        DirectoryEntry domain = new DirectoryEntry(<removed fqdn>);
        DirectorySearcher searcher = new DirectorySearcher(domain);
        searcher.Filter = "(&(objectClass=User)(displayName=*" + target + "*))";
        searcher.Sort = new SortOption("displayName", SortDirection.Ascending);
        return searcher.FindAll();
    }
于 2012-04-26T17:56:09.097 に答える