我有一个代码来获取域中所有计算机的列表。
现在我需要获取特定OU中的计算机,而不是其他机器。
所以这是我的代码从域中获取所有机器,这非常好用:
DirectoryEntry entry = new DirectoryEntry("LDAP://" + selectDomain);
DirectorySearcher mySearcher = new DirectorySearcher(entry);
mySearcher.Filter = ("(objectClass=computer)");
mySearcher.SizeLimit = int.MaxValue;
mySearcher.PageSize = int.MaxValue;
foreach (SearchResult resEnt in mySearcher.FindAll())
{
//"CN=SGSVG007DC"
string ComputerName = resEnt.GetDirectoryEntry().Name;
if (ComputerName.StartsWith("CN="))
ComputerName = ComputerName.Remove(0, "CN=".Length);
compList.Add(ComputerName);
}
mySearcher.Dispose();
entry.Dispose();
任何建议?感谢。
答案 0 :(得分:2)
您只需要将OU添加到目录条目中,因此不会将域的根作为搜索路径,而是将域+ OU作为搜索路径。
请参阅“枚举OU中的对象”@ http://www.codeproject.com/KB/system/everythingInAD.aspx
我从你的意见中看到你在这里遇到问题,所以让我们简单地说 - 注意这段代码没有经过测试,但应该澄清......
string selectDomain = "CN=myCompany,CN=com";
string selectOU = "OU=LosAngeles,OU=America";
DirectoryEntry entry = new DirectoryEntry("LDAP://" + selectOU + "," + selectDomain);
这实际上为您提供了“LDAP:// OU = LosAngeles,OU = America,CN = MyCompany,CN = com”字符串作为新目录条目。您必须指定完整的LDAP路径,而不仅仅是OU或域。
答案 1 :(得分:1)
尝试使用此目录条目:
DirectoryEntry entry = new DirectoryEntry(string.Format(“LDAP:// OU = {0},{1}”,ouName,selectDomain));
答案 2 :(得分:0)
我尝试了以上所有......但它没有用......所以这就是我尝试过的并且有效。
我知道这不是最好的方式,但它是为我工作的唯一方式...任何建议..谢谢
DirectoryEntry entry = new DirectoryEntry("LDAP://" + selectedDomain);
DirectorySearcher mySearcher = new DirectorySearcher(entry);
mySearcher.Filter = ("(objectClass=organizationalUnit)");
mySearcher.SizeLimit = int.MaxValue;
mySearcher.PageSize = int.MaxValue;
foreach (SearchResult temp in mySearcher.FindAll())
{
Global.logger.Debug("OU = " + temp.Properties["name"][0].ToString());
DirectoryEntry ou = temp.GetDirectoryEntry();
DirectorySearcher mySearcher1 = new DirectorySearcher(ou);
mySearcher1.Filter = ("(objectClass=computer)");
mySearcher1.SizeLimit = int.MaxValue;
mySearcher1.PageSize = int.MaxValue;
if (temp.Properties["name"][0].ToString() == selectedOU)
{
foreach (SearchResult resEnt in mySearcher1.FindAll())
{
//"CN=SGSVG007DC"
string ComputerName = resEnt.GetDirectoryEntry().Name;
Global.logger.Debug("ComputerName = " + resEnt.Properties["name"][0].ToString());
if (ComputerName.StartsWith("CN="))
ComputerName = ComputerName.Remove(0, "CN=".Length);
compList.Add(ComputerName);
}
}
mySearcher1.Dispose();
ou.Dispose();
}
mySearcher.Dispose();
entry.Dispose();