目录搜索器 - 搜索多个OU

时间:2014-03-06 14:44:18

标签: c#

我目前正在开展一个项目,我必须在所有服务器上提取一些Active Directory信息。 问题是我只是不是AD中的服务器,而不是所有台式计算机。 服务器位于每个位置的多个子目录中。

我能够在这样的操作系统上进行过滤,但由于其中一些是集群服务器,因此AD没有选择托管在那些服务器上的操作系统,所以我需要创建一个过滤器或一些只能查看的逻辑OU称为服务器。

这就是我现在所拥有的:

DirectoryEntry entry = new DirectoryEntry(path);

            // Create a DirectorySearcher object.
            DirectorySearcher mySearcher = new DirectorySearcher(entry);

            // Set a filter for users with the name test.
            // Search specific computer replace OperatingSystem=Windows*Server* with anr=<servername>
            mySearcher.Filter = "(&(objectClass=computer)(OperatingSystem=Windows*Server*))";

            mySearcher.SearchScope = SearchScope.Subtree;
            results = mySearcher.FindAll();
            mySearcher.PropertiesToLoad.Add("cn");
            mySearcher.PropertiesToLoad.Add("dnshostname");
            mySearcher.PropertiesToLoad.Add("Site");
            mySearcher.PropertiesToLoad.Add("Description");
            mySearcher.PropertiesToLoad.Add("Location");
            mySearcher.PropertiesToLoad.Add("operatingsystem");
            mySearcher.PropertiesToLoad.Add("operatingsystemservicepack");
            mySearcher.PropertiesToLoad.Add("operatingsystemversion");
            mySearcher.PropertiesToLoad.Add("managedBy");

            con.Open();

            foreach (SearchResult searchResult in results)
            {

                cmd.Parameters.AddWithValue("@Servername", Convert.ToString(searchResult.GetDirectoryEntry().Properties["cn"].Value));
                cmd.Parameters.AddWithValue("@DNSHostname", Convert.ToString(searchResult.GetDirectoryEntry().Properties["dnshostname"].Value));
                cmd.Parameters.AddWithValue("@Description", Convert.ToString(searchResult.GetDirectoryEntry().Properties["description"].Value));
                cmd.Parameters.AddWithValue("@Site", Convert.ToString(searchResult.GetDirectoryEntry().Properties["Site"].Value));
                cmd.Parameters.AddWithValue("@Location", Convert.ToString(searchResult.GetDirectoryEntry().Properties["Location"].Value));
                cmd.Parameters.AddWithValue("@OS", Convert.ToString(searchResult.GetDirectoryEntry().Properties["operatingsystem"].Value));
                cmd.Parameters.AddWithValue("@OSServicePack", Convert.ToString(searchResult.GetDirectoryEntry().Properties["operatingsystemservicepack"].Value));
                cmd.Parameters.AddWithValue("@OSVersion", Convert.ToString(searchResult.GetDirectoryEntry().Properties["operatingsystemversion"].Value));
                cmd.Parameters.AddWithValue("@ManagedBy", Convert.ToString(searchResult.GetDirectoryEntry().Properties["managedBy"].Value));

                if (searchResult.Path.Contains("OU=Test") == true)
                {
                    cmd.Parameters.AddWithValue("@IsTestServer", 1);
                }
                else
                {
                    cmd.Parameters.AddWithValue("@IsTestServer", 0);
                }
                cmd.ExecuteNonQuery();
                cmd.Parameters.Clear();
            }

        }

1 个答案:

答案 0 :(得分:0)

今天进行了一些搜索后,我在网站上找到了解决方案 get computer from OU