RPutilities.ActiveDirectory
1.0.9
dotnet add package RPutilities.ActiveDirectory --version 1.0.9
NuGet\Install-Package RPutilities.ActiveDirectory -Version 1.0.9
<PackageReference Include="RPutilities.ActiveDirectory" Version="1.0.9" />
<PackageVersion Include="RPutilities.ActiveDirectory" Version="1.0.9" />
<PackageReference Include="RPutilities.ActiveDirectory" />
paket add RPutilities.ActiveDirectory --version 1.0.9
#r "nuget: RPutilities.ActiveDirectory, 1.0.9"
#:package RPutilities.ActiveDirectory@1.0.9
#addin nuget:?package=RPutilities.ActiveDirectory&version=1.0.9
#tool nuget:?package=RPutilities.ActiveDirectory&version=1.0.9
A lightweight Active Directory utility library for .NET that supports forest-wide searches across all domains, flexible LDAP filters, and DTO-based results with access to all Active Directory attributes.
✅ Async
✅ Forest-wide search
✅ DTO-based results (no SearchResult leakage)
✅ JSON-friendly
✅ NuGet-ready
✅ Windows-only (Active Directory)
Search Active Directory across all domains in a forest.
✅ SearchAttribute
- UserName
- FullName
- FirstName
- LastName
- All
✅ FilterType
- Contains
- StartWith
- EndsWith
- Is
✅ ObjectClassFilter
- User
- Group
- Computer
- Contact
- OrganizationalUnit
- Container
- Domain
- PrintQueue
- ServiceConnectionPoint
- PublicFolder
- AllType
✅ Returns DTO objects instead of raw AD objects
✅ Access all AD attributes dynamically
✅ Easy JSON serialization
🔍 Search users by LastName (using await in WinForms / desktop apps)
using RPutilities.ActiveDirectory;
using static RPutilities.ActiveDirectory.Options;
var users = await ActiveDirectorySearch.Search(
"Patel",
ObjectClassFilter.User,
SearchAttribute.LastName,
FilterType.Is,
CancellationToken.None);
foreach (var user in users)
{
var s = user.Properties["mail"]?.ToString();
}
🔍 Search users across all supported search attributes (using await in WinForms / desktop apps)
var users = await ActiveDirectorySearch.Search(
"Patel",
ObjectClassFilter.User,
SearchAttribute.All,
FilterType.Is,
CancellationToken.None);
🔍 Search users by UserName (for web apps / sync usage)
using RPutilities.ActiveDirectory;
using static RPutilities.ActiveDirectory.Options;
var users = ActiveDirectorySearch.Search(
Search,
ObjectClassFilter.User,
SearchAttribute.UserName,
FilterType.Is);
foreach (var user in users)
{
var s = user.Properties["mail"]?.ToString();
}
🔍 Search users across all supported search attributes (for web apps / sync usage)
var users = ActiveDirectorySearch.Search(
Search,
ObjectClassFilter.User,
SearchAttribute.All,
FilterType.Is);
✅ Access common properties
foreach (var user in users)
{
Console.WriteLine($"{user.DisplayName} ({user.SamAccountName}) - {user.Domain}");
}
✅ Access any Active Directory property
foreach (var user in users)
{
if (user.Properties.TryGetValue("mail", out var email))
{
Console.WriteLine($"Email: {email}");
}
}
✅ Handle multi-valued properties (example: memberOf)
foreach (var user in users)
{
if (user.Properties.TryGetValue("memberOf", out var groups) && groups is object[] values)
{
foreach (var group in values)
{
Console.WriteLine(group);
}
}
}
✅ Serialize to JSON
using System.Text.Json;
string json = JsonSerializer.Serialize(
users,
new JsonSerializerOptions { WriteIndented = true });
Console.WriteLine(json);
Common mapped DTO properties include:
- Domain
- DistinguishedName
- Name
- Cn
- DisplayName
- SamAccountName
- UserPrincipalName
- ObjectClass
- ObjectClasses
- ObjectCategory
- ObjectGuid
- ObjectSid
- GivenName
- Surname
- Initials
- Title
- Description
- MailNickname
- TelephoneNumber
- Mobile
- City
- State
- PostalCode
- Country
- CountryName
- CountryCode
- PostOfficeBox
- Company
- Department
- DepartmentNumber
- Division
- Manager
- ManagedBy
- PhysicalDeliveryOfficeName
- EmployeeId
- EmployeeNumber
- EmployeeType
- UserAccountControl
- PrimaryGroupId
- SamAccountType
- InstanceType
- LogonCount
- BadPwdCount
- CodePage
- LastLogon
- LastLogonTimestamp
- LastLogoff
- PasswordLastSet
- AccountExpires
- LockoutTime
- BadPasswordTime
- WhenCreated
- WhenChanged
- UsnCreated
- UsnChanged
- TargetAddress
- LegacyExchangeDn
- ThumbnailPhoto
- MemberOf
- DirectReports
- ManagedObjects
- Member
- ProxyAddresses
Dynamic access examples:
user.Properties["objectClass"] user.Properties["cn"] user.Properties["displayName"] user.Properties["name"] user.Properties["distinguishedName"] user.Properties["userPrincipalName"] user.Properties["sAMAccountName"] user.Properties["mail"] user.Properties["telephoneNumber"] user.Properties["givenName"] user.Properties["sn"] user.Properties["initials"] user.Properties["l"] user.Properties["st"] user.Properties["postalCode"] user.Properties["c"] user.Properties["title"] user.Properties["description"] user.Properties["company"] user.Properties["department"] user.Properties["manager"] user.Properties["physicalDeliveryOfficeName"] user.Properties["employeeNumber"] user.Properties["employeeID"] user.Properties["lastLogon"] user.Properties["pwdLastSet"] user.Properties["userAccountControl"] user.Properties["accountExpires"] user.Properties["thumbnailPhoto"] user.Properties["whenCreated"] user.Properties["whenChanged"] user.Properties["memberOf"] user.Properties["directReports"] user.Properties["co"] user.Properties["mobile"] user.Properties["managedObjects"] user.Properties["departmentNumber"] user.Properties["member"] user.Properties["managedBy"]
Access the above properties like this:
foreach (var user in users) { richTextBox1.AppendText( $"FirstName: {user.Properties["givenName"]}\n" + $"LastName: {user.Properties["sn"]}\n" + $"Employee ID: {user.Properties["employeeID"]}\n"); }
Notes:
- Common AD fields are mapped to strongly typed DTO properties.
- All returned AD attributes are also available in the Properties dictionary.
- Multi-valued attributes are returned as arrays.
- Binary attributes such as thumbnailPhoto are preserved.
- Common AD date/time fields are converted to DateTime where possible.
- Domain is populated from the domain search context, with ADSPath parsing as fallback.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 is compatible. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETFramework 4.6.2
- RPutilities.ExtractString (>= 1.0.11)
- System.DirectoryServices (>= 10.0.3)
-
.NETStandard 2.0
- RPutilities.ExtractString (>= 1.0.11)
- System.DirectoryServices (>= 10.0.3)
-
net8.0
- RPutilities.ExtractString (>= 1.0.11)
- System.DirectoryServices (>= 10.0.3)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
A lightweight Active Directory utility library for .NET that supports forest-wide searches across all domains, flexible LDAP filters, and DTO-based results with access to all Active Directory attributes.
✅ Async
✅ Forest-wide search
✅ DTO-based results (no SearchResult leakage)
✅ JSON-friendly
✅ NuGet-ready
✅ Windows-only (Active Directory)
Search Active Directory across all domains in a forest.
✅ SearchAttribute
- UserName
- FullName
- FirstName
- LastName
- All
✅ FilterType
- Contains
- StartWith
- EndsWith
- Is
✅ ObjectClassFilter
- User
- Group
- Computer
- Contact
- OrganizationalUnit
- Container
- Domain
- PrintQueue
- ServiceConnectionPoint
- PublicFolder
- AllType
✅ Returns DTO objects instead of raw AD objects
✅ Access all AD attributes dynamically
✅ Easy JSON serialization
🔍 Search users by LastName (using await in WinForms / desktop apps)
using RPutilities.ActiveDirectory;
using static RPutilities.ActiveDirectory.Options;
var users = await ActiveDirectorySearch.Search(
"Patel",
ObjectClassFilter.User,
SearchAttribute.LastName,
FilterType.Is,
CancellationToken.None);
foreach (var user in users)
{
var s = user.Properties["mail"]?.ToString();
}
🔍 Search users across all supported search attributes (using await in WinForms / desktop apps)
var users = await ActiveDirectorySearch.Search(
"Patel",
ObjectClassFilter.User,
SearchAttribute.All,
FilterType.Is,
CancellationToken.None);
🔍 Search users by UserName (for web apps / sync usage)
using RPutilities.ActiveDirectory;
using static RPutilities.ActiveDirectory.Options;
var users = ActiveDirectorySearch.Search(
Search,
ObjectClassFilter.User,
SearchAttribute.UserName,
FilterType.Is);
foreach (var user in users)
{
var s = user.Properties["mail"]?.ToString();
}
🔍 Search users across all supported search attributes (for web apps / sync usage)
var users = ActiveDirectorySearch.Search(
Search,
ObjectClassFilter.User,
SearchAttribute.All,
FilterType.Is);
✅ Access common properties
foreach (var user in users)
{
Console.WriteLine($"{user.DisplayName} ({user.SamAccountName}) - {user.Domain}");
}
✅ Access any Active Directory property
foreach (var user in users)
{
if (user.Properties.TryGetValue("mail", out var email))
{
Console.WriteLine($"Email: {email}");
}
}
✅ Handle multi-valued properties (example: memberOf)
foreach (var user in users)
{
if (user.Properties.TryGetValue("memberOf", out var groups) groups is object[] values)
{
foreach (var group in values)
{
Console.WriteLine(group);
}
}
}
✅ Serialize to JSON
using System.Text.Json;
string json = JsonSerializer.Serialize(
users,
new JsonSerializerOptions { WriteIndented = true });
Console.WriteLine(json);
Common mapped DTO properties include:
- Domain
- DistinguishedName
- Name
- Cn
- DisplayName
- SamAccountName
- UserPrincipalName
- ObjectClass
- ObjectClasses
- ObjectCategory
- ObjectGuid
- ObjectSid
- GivenName
- Surname
- Initials
- Title
- Description
- Mail
- MailNickname
- TelephoneNumber
- Mobile
- City
- State
- PostalCode
- Country
- CountryName
- CountryCode
- PostOfficeBox
- Company
- Department
- DepartmentNumber
- Division
- Manager
- ManagedBy
- PhysicalDeliveryOfficeName
- EmployeeId
- EmployeeNumber
- EmployeeType
- UserAccountControl
- PrimaryGroupId
- SamAccountType
- InstanceType
- LogonCount
- BadPwdCount
- CodePage
- LastLogon
- LastLogonTimestamp
- LastLogoff
- PasswordLastSet
- AccountExpires
- LockoutTime
- BadPasswordTime
- WhenCreated
- WhenChanged
- UsnCreated
- UsnChanged
- TargetAddress
- LegacyExchangeDn
- ThumbnailPhoto
- MemberOf
- DirectReports
- ManagedObjects
- Member
- ProxyAddresses
Dynamic access examples:
user.Properties["objectClass"]
user.Properties["cn"]
user.Properties["displayName"]
user.Properties["name"]
user.Properties["distinguishedName"]
user.Properties["userPrincipalName"]
user.Properties["sAMAccountName"]
user.Properties["mail"]
user.Properties["telephoneNumber"]
user.Properties["givenName"]
user.Properties["sn"]
user.Properties["initials"]
user.Properties["l"]
user.Properties["st"]
user.Properties["postalCode"]
user.Properties["c"]
user.Properties["title"]
user.Properties["description"]
user.Properties["company"]
user.Properties["department"]
user.Properties["manager"]
user.Properties["physicalDeliveryOfficeName"]
user.Properties["employeeNumber"]
user.Properties["employeeID"]
user.Properties["lastLogon"]
user.Properties["pwdLastSet"]
user.Properties["userAccountControl"]
user.Properties["accountExpires"]
user.Properties["thumbnailPhoto"]
user.Properties["whenCreated"]
user.Properties["whenChanged"]
user.Properties["memberOf"]
user.Properties["directReports"]
user.Properties["co"]
user.Properties["mobile"]
user.Properties["managedObjects"]
user.Properties["departmentNumber"]
user.Properties["member"]
user.Properties["managedBy"]
Access the above properties like this:
foreach (var user in users)
{
richTextBox1.AppendText(
$"FirstName: {user.Properties["givenName"]}\n" +
$"LastName: {user.Properties["sn"]}\n" +
$"Employee ID: {user.Properties["employeeID"]}\n");
}
Notes:
- Common AD fields are mapped to strongly typed DTO properties.
- All returned AD attributes are also available in the Properties dictionary.
- Multi-valued attributes are returned as arrays.
- Binary attributes such as thumbnailPhoto are preserved.
- Common AD date/time fields are converted to DateTime where possible.
- Domain is populated from the domain search context, with ADSPath parsing as fallback.