2009-10-22 14 views
11

Aktif dizinden tüm bilgisayarların/makinelerin/bilgisayarların bir listesini nasıl edinebilirim?Aktif dizindeki tüm bilgisayarları listele

(bu sayfa bir arama motoru yem yapmaya çalışıyorum, kendim cevap verecektir. Birisi daha iyi varsa il olduğunu kabul cevap) Çok büyük bir alana sahip veya etki alanı sınırları nasıl nasıl yapılandırdıysa

cevap

23

Arama başına birçok öğe iade edilebilir, çağrıyı kullanmak zorunda kalabilirsiniz.

using System.DirectoryServices; //add to references 

public static List<string> GetComputers() 
{ 
    List<string> ComputerNames = new List<string>(); 

    DirectoryEntry entry = new DirectoryEntry("LDAP://YourActiveDirectoryDomain.no"); 
    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); 
     ComputerNames.Add(ComputerName); 
    } 

    mySearcher.Dispose(); 
    entry.Dispose(); 

    return ComputerNames; 
} 
1

bir LDAP sorgusu gibi: (objectCategory = bilgisayar) hile yapmak gerekir. önerilen EKS Ne -Jim

5

doğru olmakla biraz yavaş performans gösteriyor.

Bunun nedeni, her bir sonuç için GetDirectoryEntry() numaralı çağrıdır. Bu, yalnızca etkin dizin (AD) nesnesini değiştirmeniz gerektiğinde gerekli olan DirectoryEntry nesnesini oluşturur. Sorgunun tek bir nesneyi döndürmesi yeterlidir, ancak AD'deki tüm nesneleri listelerken bu, performansı büyük ölçüde düşürür.

Yalnızca AD'yi sorgulamanız gerekiyorsa, sonuç nesnesinin yalnızca Properties koleksiyonunu kullanması daha iyidir. Bu, kodun performansını birkaç kez artıracaktır.

Bu documentation for SearchResult class açıklanmıştır: SearchResult sınıfın

Örnekleri DirectoryEntry sınıfın örneklerine çok benzer. önemli fark SearchResult için veriler zaten bir sorgudan döndürülen alır SearchResultCollection, mevcut ise DirectoryEntry sınıf Active Directory Etki Alanı Hizmetleri hiyerarşiden yeni nesne her erişildiğinde zaman onun bilgileri aldığından emin olduğunu , DirectorySearcher sınıfı ile gerçekleştirilir. İşte

Properties koleksiyonunu nasıl kullanılacağına dair bir örnek: Biz numarasını kontrol etmek Properties["name"].Count kullanmamın nedeni özellikleri birden fazla değere sahip olabilir

public static List<string> GetComputers() 
{ 
    List<string> computerNames = new List<string>(); 

    using (DirectoryEntry entry = new DirectoryEntry("LDAP://YourActiveDirectoryDomain.no")) { 
     using (DirectorySearcher mySearcher = new DirectorySearcher(entry)) { 
      mySearcher.Filter = ("(objectClass=computer)"); 

      // No size limit, reads all objects 
      mySearcher.SizeLimit = 0; 

      // Read data in pages of 250 objects. Make sure this value is below the limit configured in your AD domain (if there is a limit) 
      mySearcher.PageSize = 250; 

      // Let searcher know which properties are going to be used, and only load those 
      mySearcher.PropertiesToLoad.Add("name"); 

      foreach(SearchResult resEnt in mySearcher.FindAll()) 
      { 
       // Note: Properties can contain multiple values. 
       if (resEnt.Properties["name"].Count > 0) 
       { 
        string computerName = (string)resEnt.Properties["name"][0]; 
        computerNames.Add(computerName); 
       } 
      } 
     } 
    } 

    return computerNames; 
} 

Documentation for SearchResult.Properties

Not, yani değerlerin

İşleri daha da geliştirmek için, arama yapan kişiye hangi özellikleri önceden kullanacağınızı bildirmek için PropertiesToLoad koleksiyonunu kullanın. Bu, araştırmacının sadece kullanılacak olan verileri okumasına izin verir. DirectoryEntry ve DirectorySearcher nesneler uygun şekilde kullanılan tüm kaynakları serbest bırakmak amacıyla yerleştirilebilir gerektiği

not edin. En iyi , bir using yan tümcesiyle yapılır.

İlgili konular