2014-03-06 3 views
0

현재 모든 서버에서 일부 Active Directory 정보를 가져와야하는 프로젝트에서 작업 중입니다. 문제는 내가 AD에있는 서버 만 wan't하고 모든 데스크탑 컴퓨터가 아닙니다. 서버는 각 위치에 대해 여러 하위 디렉터리에 있습니다.디렉토리 검색 자 - 여러 OU 검색

운영체제에서 필터링 할 수 있었지만 일부는 클러스터 서버이므로 운영체제를 사용하지 않고 필터 나 논리 만 만들면됩니다. OU의 Servers라고합니다.

내가 현재 가지고있는 것입니다 : 내가 웹 사이트에 여기에 해결책을 발견 오늘 좀 더 검색 후

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

     } 

답변