2017-02-15 9 views
1

Имеет немного проблемы с некоторыми запросами LDAP C#. Самое непосредственное наиболее согласованное заключается в том, что я, кажется, не хватает примерно 1/3 ожидаемого набора данных.C# Script LDAP не возвращается Все группы

При наличии двух скриншотов из набора результатов.

SSIS Results Count for C# Script

Powershell Get-AdGroup -Filter * Result Count

В отношении к C# Фильтр

Я генерируя фильтр здесь

public string GenerateFilter() 
    { 
     var LastRunDateTime = Variables.LastRunDateTime; 
     var filter = "(ObjectClass=group)"; 

     /* 
     string filter = string.Format(
      "(&(ObjectClass=group)(whenChanged>={0:yyyyMMddHHmmss.0Z}))",//This is the DateTime format it takes. 
      LastRunDateTime.AddHours(-11) // Always use UTC to make life easy. Otherwise you need to change the above time formatting. 
     );     */ 
     return filter; 
    } 

Я закомментировал исходный код, который возвращается то же самое счетчик для первого запуска

Что касается рабочей лошади части кода, я не вижу причин, по которым он не возвращает все значения.

Я проверил недостающие значения (удалось отслеживать их с небольшим количеством логики), и между ними нет разницы в конфигурации.

public override void CreateNewOutputRows() 
    { 
     /* 
      Add rows by calling the AddRow method on the member variable named "<Output Name>Buffer". 
      For example, call MyOutputBuffer.AddRow() if your output was named "MyOutput". 
     */ 
     DataTable workTable = new DataTable("Ad_Users"); 
     DataColumn workColumn = workTable.Columns.Add("SID", typeof(string)); 
     workTable.Columns.Add("ObjectCategory", typeof(string)); 
     workTable.Columns.Add("ObjectGUID", typeof(string)); 
     workTable.Columns.Add("CanonicalName", typeof(string)); 
     workTable.Columns.Add("SAMAccount", typeof(string)); 
     workTable.Columns.Add("distinguishedName", typeof(string)); 
     workTable.Columns.Add("DisplayName", typeof(string)); 
     workTable.Columns.Add("Description", typeof(string)); 
     workTable.Columns.Add("WhenCreated", typeof(DateTime)); 
     workTable.Columns.Add("WhenChanged", typeof(DateTime)); 
     // workTable.Columns.Add("MemberOf", typeof(string)); 

     var domainController = "[REDACTED]"; 
     using (var domain = new System.DirectoryServices.DirectoryEntry("LDAP://" + domainController)) 
     { 
      using (var searcher = new DirectorySearcher(domain, GenerateFilter())) 
      { 
       searcher.PropertiesToLoad.Add("ObjectSID"); 
       searcher.PropertiesToLoad.Add("ObjectCategory"); 
       searcher.PropertiesToLoad.Add("ObjectGuid"); 
       searcher.PropertiesToLoad.Add("CN"); 
       searcher.PropertiesToLoad.Add("SAMAccountName"); 
       searcher.PropertiesToLoad.Add("DisplayName"); 
       searcher.PropertiesToLoad.Add("distinguishedName"); 
       searcher.PropertiesToLoad.Add("Description"); 
       searcher.PropertiesToLoad.Add("WhenCreated"); 
       searcher.PropertiesToLoad.Add("WhenChanged"); 
       // searcher.PropertiesToLoad.Add("MemberOf"); 

       foreach (SearchResult result in searcher.FindAll()) 
       { 
        var de = result.GetDirectoryEntry(); 

        var sidInBytes = (byte[])de.Properties["ObjectSID"].Value; 
        var GUID = (byte[])de.Properties["ObjectGuid"].Value; 
        Guid guid = new Guid(GUID); 

        //INSERT VALUES INTO DATATABLE 
        DataRow workRow = workTable.NewRow(); 
        workRow["SID"] = new System.Security.Principal.SecurityIdentifier(sidInBytes, 0); 
        workRow["ObjectCategory"] = de.Properties["ObjectCategory"].Value; 
        workRow["ObjectGUID"] = guid; 
        workRow["CanonicalName"] = de.Properties["CN"].Value; 
        workRow["SAMAccount"] = de.Properties["SAMAccountName"].Value; 
        workRow["DisplayName"] = de.Properties["DisplayName"].Value; 
        workRow["distinguishedName"] = de.Properties["distinguishedName"].Value; 
        workRow["Description"] = de.Properties["Description"].Value; 
        workRow["WhenCreated"] = Convert.ToDateTime(de.Properties["WhenCreated"].Value); 
        workRow["WhenChanged"] = Convert.ToDateTime(de.Properties["WhenChanged"].Value); 

        Output0Buffer.AddRow(); 
        Output0Buffer.ObjectSID = workRow["SID"].ToString(); 
        Output0Buffer.ObjectCategory = workRow["ObjectCategory"].ToString(); 
        Output0Buffer.ObjectGUID = workRow["ObjectGUID"].ToString(); 
        Output0Buffer.CanonicalName = workRow["CanonicalName"].ToString(); 
        Output0Buffer.SamAccountName = workRow["SAMAccount"].ToString(); 
        Output0Buffer.DisplayName = workRow["DisplayName"].ToString(); 
        Output0Buffer.DistinguishedName = workRow["distinguishedName"].ToString(); 
        Output0Buffer.Description = workRow["Description"].ToString(); 
        Output0Buffer.WhenCreated = Convert.ToDateTime(workRow["WhenCreated"]); 
        Output0Buffer.WhenChanged = Convert.ToDateTime(workRow["WhenChanged"]); 
       } 
      } 
     } 
    } 
} 

Если кто-нибудь сможет помочь ему было бы весьма признателен

ответ

1

Чтобы получить сопоставимые результаты, которые вы должны использовать

Get-ADGroup -LDAPFilter "(objectClass=group)"