2012-04-26 5 views
1

私はADの検索方法を理解しましたが、検索結果を得るためには正確な検索が必要です。私は正確にすることはできません。 問題は、電話番号に基づいてユーザーを検索しなければならないということです。ユーザーが入力したとおりの形式で書かれます。 私の入力は常にMSISDNです。数字だけです。間に空白や余分な文字はありません。ADのフィールドは単純ですが、それだけです。wildcarts/regexpを使ってADでユーザーを検索していますか?

どのようにすべてのユーザーを取得せずにこのような番号を検索し、ソフトウェアでスキャンを行うことができますか。

たとえば、私はフィールド "mobile"と "telephoneNumber"を見ています。

ADの数字は、たとえば「+45 12 34 56 78」または「(555)1234」とすることができますが、後者は有効なMSISDNとしてはほとんど当てはまりませんが、アイデアは同じです。あらゆる種類の狂気コンピュータの視点から見たものです。 すべてのユーザーを検索すると、すべての非数字を削除するだけでMSISDNを生成できますが、数字を見つける必要があるたびにAD全体をダンプするとEnterpriseがうまくいくのではないかと疑います。

サンプルコード:

 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(""); 
     } 
+0

1つのオプションは、検索文字列を解析し、各桁の間でワイルドカード文字を挿入することです。 MSISDN 4512345678は検索文字列「* 4 * 5 * 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 *」になります。 * 5 * 6 * 7 * 8 *) "となります。しかし、私が毎秒数百人を送り始めると、システム管理者に首を絞めてもらい、さらに悪いことに、非常に短い順序で呼吸させることになるでしょう。 –

答えて

1

あなたのフィルタにワイルドカードを置くことができます。私は電話番号を出力するために名前を検索する同様のプログラムを持っています。

私は、このようにフィルタリング:私は問題を解決していることがわかりましたが、いかなる形で、それはエレガントませ

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(); 
    } 
+0

しかし、それは私が持っているものではうまくいかない、ADの価値は、私が完全な価値を持っている部分的または断片化されたものである。 –

+0

あなたのADはひどいです。キッド...しかし、あなたは広告を一切支配していますか?標準化された電話番号を持つようにユーザーを追加する場合は、適切なプロセスが必要です。 – MatthewP

+0

ADは大きいですか?あなたのプログラムは頻繁に実行されますか?あなたはこのプログラムでADを "修正"しようとしているのですか、ユーザーが使用できるphonelistタイプのオンデマンドアプリを提供していますか?広告には何種類の電話番号がありますか(ユーザーは必要なものを置いていますか、いくつかの国の管理者は手続きなどが異なります)? – MatthewP

関連する問題