Active Directory Exibe todas as propriedades em uma tabela

Eu estou tentando alcançar uma consulta LDAP para reunir todas as propriedades que temos sobre nossos usuários sem especificar as propriedades antes da mão, gostaria de exibir isso em uma tabela, então usei o código abaixo. Isso funciona se eu descomentar o search.PropertiesToLoad.Add ("cn"); linha e irá exibir quaisquer outras propriedades que eu adiciono da mesma maneira, mas não quando eu fizer uma pesquisa completa para todas as propriedades.

DirectoryEntry myLdapConnection = createDirectoryEntry();
DirectorySearcher search = new DirectorySearcher(myLdapConnection);

search.CacheResults = true;
//search.PropertiesToLoad.Add("cn");

SearchResultCollection allResults = search.FindAll();
DataTable resultsTable = new DataTable("Results");

//add columns for each property in results
foreach (string colName in allResults.PropertiesLoaded)
    resultsTable.Columns.Add(colName, colName.GetType());

//loop to add records to DataTable
foreach (SearchResult result in allResults)
{
    int tmp = result.Properties.Count;
    DataRow row = resultsTable.NewRow();
    foreach (string columnName in search.PropertiesToLoad)
    {
        if (columnName.Equals("lastlogon"))
        {
            if (result.Properties.Contains(columnName))
                row[columnName] = ConvertDate(result.Properties[columnName].ToString());
            else
                row[columnName] = "";
        }
        else
        {
            if (result.Properties.Contains(columnName))
                row[columnName] = result.Properties[columnName][0].ToString();
            else
                row[columnName] = "";
        }
    }
    resultsTable.Rows.Add(row);
}

gridResults.DataSource = resultsTable;

O problema parece estar com

foreach (string colName in allResults.PropertiesLoaded)
    resultsTable.Columns.Add(colName, colName.GetType());

Eu esperava que isso fizesse um loop de todas as propriedades quando nenhum PropertiesToLoad tivesse sido especificado, mas isso não é uma forma de obter o que eu quero.

Eu sei que preciso de alguns try catches e outros bits no código até o momento, é um rascunho.

questionAnswers(3)

yourAnswerToTheQuestion