TestimoX

API Reference

Class

LdapQueryHelper

Namespace ADPlayground.Helpers
Assembly ADPlayground
Modifiers static

Provides centralized LDAP query functionality for Active Directory operations. Handles domain/forest iteration, property extraction, error handling, and result mapping.

Inheritance

  • Object
  • LdapQueryHelper

Remarks

See usage examples in the unit tests for typical scenarios.

Methods

public static T CreateWithParameterMapping<T>(IDictionary<String, Object> parameters) #
Returns: T

Type Parameters

T

Parameters

parameters IDictionary<String, Object> requiredposition: 0
CreateWithParameterMapping``1(System.Collections.Generic.IDictionary{System.String,System.Object} parameters) #

Creates an instance of a class and maps parameters to constructor

Type Parameters

T
Type to create

Parameters

parameters System.Collections.Generic.IDictionary{System.String,System.Object} required
Parameter dictionary

Returns

Created instance

public static Nullable<Boolean> GetBoolProperty(SearchResult result, String propertyName) #
Returns: Nullable<Boolean>

Safely extracts boolean property from SearchResult with null handling

Parameters

result System.DirectoryServices.SearchResult requiredposition: 0
propertyName System.String requiredposition: 1
public static Nullable<DateTime> GetDateTimeProperty(SearchResult result, String propertyName) #
Returns: Nullable<DateTime>

Safely extracts DateTime property from SearchResult with null handling

Parameters

result System.DirectoryServices.SearchResult requiredposition: 0
propertyName System.String requiredposition: 1
public static Nullable<DateTime> GetFileTimeProperty(SearchResult result, String propertyName) #
Returns: Nullable<DateTime>

Safely extracts FileTime DateTime property from SearchResult

Parameters

result System.DirectoryServices.SearchResult requiredposition: 0
propertyName System.String requiredposition: 1
public static Nullable<Int32> GetIntProperty(SearchResult result, String propertyName) #
Returns: Nullable<Int32>

Safely extracts integer property from SearchResult with null handling

Parameters

result System.DirectoryServices.SearchResult requiredposition: 0
propertyName System.String requiredposition: 1
public static Nullable<Int64> GetLongProperty(SearchResult result, String propertyName) #
Returns: Nullable<Int64>

Safely extracts a 64-bit integer property from SearchResult with null handling.

Parameters

result System.DirectoryServices.SearchResult requiredposition: 0
propertyName System.String requiredposition: 1
public static String[] GetMultiStringProperty(SearchResult result, String propertyName) #
Returns: String[]

Safely extracts multi-value string property from SearchResult

Parameters

result System.DirectoryServices.SearchResult requiredposition: 0
propertyName System.String requiredposition: 1
public static String GetSidStringProperty(SearchResult result, String propertyName = "objectSid") #
Returns: String

Safely extracts SID property (as string) from SearchResult, handling byte[] and SID objects.

Parameters

result System.DirectoryServices.SearchResult requiredposition: 0
propertyName System.String = "objectSid" optionalposition: 1
public static String GetStringProperty(SearchResult result, String propertyName) #
Returns: String

Safely extracts string property from SearchResult with null handling

Parameters

result System.DirectoryServices.SearchResult requiredposition: 0
propertyName System.String requiredposition: 1
public static IEnumerable<String> GetTargetDomains(String domainName = null, String forestName = null) #
Returns: IEnumerable<String>

Gets domains to query based on parameters with automatic null handling.

Parameters

domainName System.String = null optionalposition: 0
Specific domain to query. If null, queries all domains in forest.
forestName System.String = null optionalposition: 1
Specific forest to target. If null, uses current forest.

Returns

Collection of domain names to query.

public static Forest GetTargetForest(String forestName = null) #
Returns: Forest

Gets forest context with automatic fallback to current forest.

Parameters

forestName System.String = null optionalposition: 0
Specific forest name. If null, returns current forest.

Returns

Forest context for the specified or current forest.

public static Boolean HasUserAccountControlFlag(SearchResult result, Int32 flag, String propertyName = "userAccountControl") #
Returns: Boolean

Checks if userAccountControl flag is set

Parameters

result System.DirectoryServices.SearchResult requiredposition: 0
flag System.Int32 requiredposition: 1
propertyName System.String = "userAccountControl" optionalposition: 2
public static TResult InvokeWithParameterMapping<TResult>(MethodInfo method, IDictionary<String, Object> parameters, Object instance = null) #
Returns: TResult

Type Parameters

TResult

Parameters

method MethodInfo requiredposition: 0
parameters IDictionary<String, Object> requiredposition: 1
instance Object = null optionalposition: 2
InvokeWithParameterMapping``1(System.Reflection.MethodInfo method, System.Collections.Generic.IDictionary{System.String,System.Object} parameters, System.Object instance) #

Automatically maps dictionary parameters to method parameters using reflection Similar to the TestimoX MethodInfo wrapper but optimized for LDAP scenarios

Type Parameters

TResult
Return type of the method

Parameters

method System.Reflection.MethodInfo required
Method to invoke
parameters System.Collections.Generic.IDictionary{System.String,System.Object} required
Parameter dictionary
instance System.Object required
Instance to invoke on (null for static methods)

Returns

Method result

public static IEnumerable<T> Query<T>(String ldapPath, String filter, String[] propertiesToLoad, Func<SearchResult, T> resultMapper, SearchScope searchScope = Subtree, Int32 pageSize = 1000, Int32 sizeLimit = 0, SecurityMasks securityMasks = None) #
Returns: IEnumerable<T>

Type Parameters

T

Parameters

ldapPath String requiredposition: 0
filter String requiredposition: 1
propertiesToLoad String[] requiredposition: 2
resultMapper Func<SearchResult, T> requiredposition: 3
searchScope SearchScope = Subtree optionalposition: 4
pageSize Int32 = 1000 optionalposition: 5
sizeLimit Int32 = 0 optionalposition: 6
securityMasks SecurityMasks = None optionalposition: 7
public static Task<IEnumerable<T>> QueryAsync<T>(String ldapPath, String filter, String[] propertiesToLoad, Func<SearchResult, T> resultMapper, SearchScope searchScope = Subtree, Int32 pageSize = 1000, CancellationToken cancellationToken = null, Int32 sizeLimit = 0, SecurityMasks securityMasks = None) #
Returns: Task<IEnumerable<T>>

Type Parameters

T

Parameters

ldapPath String requiredposition: 0
filter String requiredposition: 1
propertiesToLoad String[] requiredposition: 2
resultMapper Func<SearchResult, T> requiredposition: 3
searchScope SearchScope = Subtree optionalposition: 4
pageSize Int32 = 1000 optionalposition: 5
cancellationToken CancellationToken = null optionalposition: 6
sizeLimit Int32 = 0 optionalposition: 7
securityMasks SecurityMasks = None optionalposition: 8
QueryAsync``1(System.String ldapPath, System.String filter, System.String[] propertiesToLoad, System.Func{System.DirectoryServices.SearchResult,``0} resultMapper, System.DirectoryServices.SearchScope searchScope, System.Int32 pageSize, System.Threading.CancellationToken cancellationToken, System.Int32 sizeLimit, System.DirectoryServices.SecurityMasks securityMasks) #

Asynchronously executes an LDAP query against the provided path.

Type Parameters

T
Result type to map to.

Parameters

ldapPath System.String required
LDAP path or domain name.
filter System.String required
LDAP filter.
propertiesToLoad System.String[] required
Properties to load from AD.
resultMapper System.Func{System.DirectoryServices.SearchResult,``0} required
Function to map SearchResult to the result type.
searchScope System.DirectoryServices.SearchScope required
Scope for the directory search.
pageSize System.Int32 required
Page size for large queries.
cancellationToken System.Threading.CancellationToken required
Cancellation token.
sizeLimit System.Int32 required
Optional server-side size limit (0 = no limit).
securityMasks System.DirectoryServices.SecurityMasks required
Security masks to request (e.g., Owner).

Returns

Mapped results from the query.

public static IEnumerable<T> QueryDomain<T>(String domainName, String filter, String[] propertiesToLoad, Func<SearchResult, T> resultMapper, SearchScope searchScope = Subtree, Int32 pageSize = 1000, Int32 sizeLimit = 0, SecurityMasks securityMasks = None) #
Returns: IEnumerable<T>

Type Parameters

T

Parameters

domainName String requiredposition: 0
filter String requiredposition: 1
propertiesToLoad String[] requiredposition: 2
resultMapper Func<SearchResult, T> requiredposition: 3
searchScope SearchScope = Subtree optionalposition: 4
pageSize Int32 = 1000 optionalposition: 5
sizeLimit Int32 = 0 optionalposition: 6
securityMasks SecurityMasks = None optionalposition: 7
public static async Task<IEnumerable<T>> QueryDomainAsync<T>(String domainName, String filter, String[] propertiesToLoad, Func<SearchResult, T> resultMapper, SearchScope searchScope = Subtree, Int32 pageSize = 1000, CancellationToken cancellationToken = null, Int32 sizeLimit = 0, SecurityMasks securityMasks = None) #
Returns: Task<IEnumerable<T>>

Type Parameters

T

Parameters

domainName String requiredposition: 0
filter String requiredposition: 1
propertiesToLoad String[] requiredposition: 2
resultMapper Func<SearchResult, T> requiredposition: 3
searchScope SearchScope = Subtree optionalposition: 4
pageSize Int32 = 1000 optionalposition: 5
cancellationToken CancellationToken = null optionalposition: 6
sizeLimit Int32 = 0 optionalposition: 7
securityMasks SecurityMasks = None optionalposition: 8
QueryDomainAsync``1(System.String domainName, System.String filter, System.String[] propertiesToLoad, System.Func{System.DirectoryServices.SearchResult,``0} resultMapper, System.DirectoryServices.SearchScope searchScope, System.Int32 pageSize, System.Threading.CancellationToken cancellationToken, System.Int32 sizeLimit, System.DirectoryServices.SecurityMasks securityMasks) #

Asynchronously executes a single-domain LDAP query with automatic result processing.

Type Parameters

T
Result type to map to

Parameters

domainName System.String required
Domain to query
filter System.String required
LDAP filter
propertiesToLoad System.String[] required
Properties to load from AD
resultMapper System.Func{System.DirectoryServices.SearchResult,``0} required
Function to map SearchResult to T
searchScope System.DirectoryServices.SearchScope required
Scope for the directory search
pageSize System.Int32 required
Page size for large queries (default: 1000)
cancellationToken System.Threading.CancellationToken required
Cancellation token.
sizeLimit System.Int32 required
Optional server-side size limit (0 = no limit).
securityMasks System.DirectoryServices.SecurityMasks required
Security masks to request (e.g., Owner).

Returns

Mapped results

QueryDomain``1(System.String domainName, System.String filter, System.String[] propertiesToLoad, System.Func{System.DirectoryServices.SearchResult,``0} resultMapper, System.DirectoryServices.SearchScope searchScope, System.Int32 pageSize, System.Int32 sizeLimit, System.DirectoryServices.SecurityMasks securityMasks) #

Executes a single-domain LDAP query with automatic result processing.

Type Parameters

T
Result type to map to

Parameters

domainName System.String required
Domain to query
filter System.String required
LDAP filter
propertiesToLoad System.String[] required
Properties to load from AD
resultMapper System.Func{System.DirectoryServices.SearchResult,``0} required
Function to map SearchResult to T
searchScope System.DirectoryServices.SearchScope required
Scope for the directory search
pageSize System.Int32 required
Page size for large queries (default: 1000)
sizeLimit System.Int32 required
Optional server-side size limit (0 = no limit).
securityMasks System.DirectoryServices.SecurityMasks required
Security masks to request (e.g., Owner).

Returns

Mapped results

public static IEnumerable<T> QueryMultiDomain<T>(String filter, String[] propertiesToLoad, Func<SearchResult, T> resultMapper, String domainName = null, String forestName = null, SearchScope searchScope = Subtree, Int32 pageSize = 1000, CancellationToken cancellationToken = null, Int32 sizeLimit = 0, SecurityMasks securityMasks = None) #
Returns: IEnumerable<T>

Type Parameters

T

Parameters

filter String requiredposition: 0
propertiesToLoad String[] requiredposition: 1
resultMapper Func<SearchResult, T> requiredposition: 2
domainName String = null optionalposition: 3
forestName String = null optionalposition: 4
searchScope SearchScope = Subtree optionalposition: 5
pageSize Int32 = 1000 optionalposition: 6
cancellationToken CancellationToken = null optionalposition: 7
sizeLimit Int32 = 0 optionalposition: 8
securityMasks SecurityMasks = None optionalposition: 9
public static async Task<IEnumerable<T>> QueryMultiDomainAsync<T>(String filter, String[] propertiesToLoad, Func<SearchResult, T> resultMapper, String domainName = null, String forestName = null, SearchScope searchScope = Subtree, Int32 pageSize = 1000, CancellationToken cancellationToken = null, Int32 sizeLimit = 0, SecurityMasks securityMasks = None) #
Returns: Task<IEnumerable<T>>

Type Parameters

T

Parameters

filter String requiredposition: 0
propertiesToLoad String[] requiredposition: 1
resultMapper Func<SearchResult, T> requiredposition: 2
domainName String = null optionalposition: 3
forestName String = null optionalposition: 4
searchScope SearchScope = Subtree optionalposition: 5
pageSize Int32 = 1000 optionalposition: 6
cancellationToken CancellationToken = null optionalposition: 7
sizeLimit Int32 = 0 optionalposition: 8
securityMasks SecurityMasks = None optionalposition: 9
QueryMultiDomainAsync``1(System.String filter, System.String[] propertiesToLoad, System.Func{System.DirectoryServices.SearchResult,``0} resultMapper, System.String domainName, System.String forestName, System.DirectoryServices.SearchScope searchScope, System.Int32 pageSize, System.Threading.CancellationToken cancellationToken, System.Int32 sizeLimit, System.DirectoryServices.SecurityMasks securityMasks) #

Asynchronously executes multi-domain LDAP query across the forest with parallel domain iteration. Handles cancellation and aggregates any thrown exceptions.

Type Parameters

T
Result type to map to

Parameters

filter System.String required
LDAP filter
propertiesToLoad System.String[] required
Properties to load from AD
resultMapper System.Func{System.DirectoryServices.SearchResult,``0} required
Function to map SearchResult to T
domainName System.String required
Specific domain (null for all domains in forest)
forestName System.String required
Specific forest (null for current forest)
searchScope System.DirectoryServices.SearchScope required
Scope for the directory search.
pageSize System.Int32 required
Page size for large queries (default: 1000)
cancellationToken System.Threading.CancellationToken required
Cancellation token.
sizeLimit System.Int32 required
Optional server-side size limit (0 = no limit).
securityMasks System.DirectoryServices.SecurityMasks required
Security masks to request (e.g., Owner).

Returns

Mapped results from all target domains

QueryMultiDomain``1(System.String filter, System.String[] propertiesToLoad, System.Func{System.DirectoryServices.SearchResult,``0} resultMapper, System.String domainName, System.String forestName, System.DirectoryServices.SearchScope searchScope, System.Int32 pageSize, System.Threading.CancellationToken cancellationToken, System.Int32 sizeLimit, System.DirectoryServices.SecurityMasks securityMasks) #

Executes multi-domain LDAP query across the forest with parallel domain iteration. Handles cancellation and aggregates any thrown exceptions.

Type Parameters

T
Result type to map to

Parameters

filter System.String required
LDAP filter
propertiesToLoad System.String[] required
Properties to load from AD
resultMapper System.Func{System.DirectoryServices.SearchResult,``0} required
Function to map SearchResult to T
domainName System.String required
Specific domain (null for all domains in forest)
forestName System.String required
Specific forest (null for current forest)
searchScope System.DirectoryServices.SearchScope required
Scope for the directory search.
pageSize System.Int32 required
Page size for large queries (default: 1000)
cancellationToken System.Threading.CancellationToken required
Cancellation token.
sizeLimit System.Int32 required
Optional server-side size limit (0 = no limit).
securityMasks System.DirectoryServices.SecurityMasks required
Security masks to request (e.g., Owner).

Returns

Mapped results from all target domains

Query``1(System.String ldapPath, System.String filter, System.String[] propertiesToLoad, System.Func{System.DirectoryServices.SearchResult,``0} resultMapper, System.DirectoryServices.SearchScope searchScope, System.Int32 pageSize, System.Int32 sizeLimit, System.DirectoryServices.SecurityMasks securityMasks) #

Executes an LDAP query against the provided path.

Type Parameters

T
Result type to map to.

Parameters

ldapPath System.String required
LDAP path or domain name.
filter System.String required
LDAP filter.
propertiesToLoad System.String[] required
Properties to load from AD.
resultMapper System.Func{System.DirectoryServices.SearchResult,``0} required
Function to map SearchResult to the result type.
searchScope System.DirectoryServices.SearchScope required
Scope for the directory search.
pageSize System.Int32 required
Page size for large queries.
sizeLimit System.Int32 required
Optional server-side size limit (0 = no limit).
securityMasks System.DirectoryServices.SecurityMasks required
Security masks to request (e.g., Owner).

Returns

Mapped results from the query.