Active Directory
From Richard's Wiki
- LinqPad C# script to get detail of your own identity in AD:
// using System.DirectoryServices;
// using System.DirectoryServices.AccountManagement;
using(PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "apac"))
using(UserPrincipal usr = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, "kurzejar"))
usr.Dump();
- LinqPad C# script to get all users and groups in active directory AD:
//using System.DirectoryServices;
//using System.DirectoryServices.AccountManagement;
void Main()
{
// const string adSearchContainer = "DC=apac,DC=birchmangroup,DC=com,DC=au";
const string adSearchContainer = "DC=mrwa,DC=wa,DC=gov,DC=au";
var users = FetchAllUsersFromActiveDirectory(adSearchContainer);
var groups = FetchAllGroupsFromActiveDirectory(adSearchContainer);
users.Dump("Users", true); // to datagrid
groups.Dump("Groups", true); // to datagrid
}
// Define other methods and classes here
public class User
{
public string Name { get; set; }
public string Login { get; set; }
public string DistinguishedName { get; set; }
}
private static IEnumerable<User> FetchAllUsersFromActiveDirectory(string searchContainer) {
return FetchAllFromActiveDirectory(searchContainer, "(&ObjectCategory=user)");
}
private static IEnumerable<User> FetchAllGroupsFromActiveDirectory(string searchContainer) {
return FetchAllFromActiveDirectory(searchContainer, "(&objectClass=group)");
}
private static IEnumerable<User> FetchAllFromActiveDirectory(string searchContainer, string directorySearcherFilter)
{
try
{
List<User> result = new List<User>();
//using (DirectoryEntry searchRoot = new DirectoryEntry()) // Search from root of current domain
using (DirectoryEntry searchRoot = new DirectoryEntry("LDAP://" + searchContainer))
{
DirectorySearcher ser = new DirectorySearcher(searchRoot)
{
// Filter = "(&ObjectCategory=user)",
// Filter = "(&objectClass=group)",
Filter = directorySearcherFilter,
ReferralChasing = ReferralChasingOption.All,
PageSize = 1000,
};
ser.PropertiesToLoad.Add("Name");
ser.PropertiesToLoad.Add("distinguishedName");
ser.PropertiesToLoad.Add("sAMAccountName");
//ser.PropertiesToLoad.Add("mail");
//ser.PropertiesToLoad.Add("description");
using (SearchResultCollection searchResults = ser.FindAll())
{
int count = searchResults.Count;
for (int i = 0; i < count; i++)
{
SearchResult searchResult = searchResults[i];
string name = GetSearchResultProperty(searchResult, "Name");
string distinguishedName = GetSearchResultProperty(searchResult, "distinguishedName");
string samAccount = GetSearchResultProperty(searchResult, "sAMAccountName");
//var email = GetSearchResultProperty(searchResult, "mail");
//var description = GetSearchResultProperty(searchResult, "description");
result.Add(new User
{
Name = name,
Login = samAccount,
DistinguishedName = distinguishedName,
//Email = email,
//Role = description
});
}
}
ser.Dispose();
}
return result;
}
catch (Exception ex)
{
string message = string.Format("FetchAllUsersFromActiveDirectory() failed");
// Log.Error(message, ex);
throw;
}
}
private static string GetSearchResultProperty(SearchResult result, string name)
{
if (result.Properties.Contains(name))
{
var propertyCollection = result.Properties[name];
if (propertyCollection.Count == 1 && propertyCollection[0] != null)
{
return propertyCollection[0].ToString();
}
}
return string.Empty;
}