我已经找到了如何搜索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("");
}
答案 0 :(得分: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();
}