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