您的位置:首页 > 编程语言 > C#

How to get groups, users from Active Directory with C#

2011-04-01 20:10 232 查看
Don’t forget “using System.DirectoryServices;”

1. How to get group from AD ?
this.Cursor = Cursors.WaitCursor;

DirectoryEntry objDE = GetDirectoryObject();
DirectorySearcher objDS = new DirectorySearcher(objDE);
objDS.SearchRoot = objDE;

// User inputs some special group name for search.
if (String.IsNullOrEmpty( UserInputGroupNameforSearch )) {
objDS.Filter = "(&(objectClass=group))";
} else {
objDS.Filter = "(&(objectClass=group)(cn=" + UserInputGroupNameforSearch + "*))";
}
objDS.PageSize = 1000;
SearchResultCollection colResults = objDS.FindAll();

if (colResults != null) {
foreach (SearchResult objResult in colResults) {
// insert group name to Listbox
this.lstGroup.Items.Add(GetProperty(objResult, "cn"));
}
}

private DirectoryEntry GetDirectoryObject() {
DirectoryEntry objDE;
string lstrADFullPath = "LDAP://" + YourDomainName
string lstrUser = ValidUserName;
string lstrPassword = ValidPassword;
objDE = new DirectoryEntry(lstrADFullPath, lstrUser, lstrPassword, AuthenticationTypes.Secure);
return objDE;
}
2. How to get users list from special group?
DirectoryEntry objGroup = GetDirectoryObject();
DirectorySearcher objDS = new DirectorySearcher(objGroup);
objDS.Filter = "(&(objectClass=group)(cn=" + GroupNameInListBox + "))";

objDS.SearchRoot = objGroup;
SearchResult results = objDS.FindOne();

if (results != null) {
System.DirectoryServices.ResultPropertyCollection pcoll = results.Properties;

int n = pcoll["member"].Count;

for (int i = 0; i < n; i++) {
lsMemberString = pcoll["member"][i].ToString();
DirectoryEntry deUser = new DirectoryEntry("LDAP://UserDomainName/" + lsMemberString, ValidUserName, ValidUserPassword, AuthenticationTypes.Secure);
// Show all users with valid email address
if (deUser != null && deUser.Properties["mail"] != null && deUser.Properties["mail"].Value != null && ! String.IsNullOrEmpty(deUser.Properties["mail"].Value.ToString())) {
YourControl.Add(deUser.Properties["cn"].Value, deUser.Properties["sAMAccountName"].Value, deUser.Properties["givenName"].Value, deUser.Properties["SN"].Value, deUser.Properties["mail"].Value, deUser.Properties["description"].Value);
}
deUser.Close();
}
}
}

objDS.Dispose();
objGroup.Dispose();

3. How to get users from AD?

Search users by FirstName, Lastname, Email and WindowsAccount
String lsFirstNameStr = String.Empty;
String lsLastNameStr = String.Empty;
String lsEmailStr = String.Empty;
String lsWindowsNameStr = String.Empty;

if (!String.IsNullOrEmpty( UserFirstName )) {
lsFirstNameStr = "(givenName=" + UserFirstName + "*)";
}
if (!String.IsNullOrEmpty(UserLastName)) {
lsLastNameStr = "(SN=" + UserLastName + "*)";
} else {
lsLastNameStr = "(!(SN=*))";
}
if (!String.IsNullOrEmpty(UserEmail)) {
lsEmailStr = "(mail=" + UserEmail + "*)";
} else {
lsEmailStr = "(mail=*)";
}
if (!String.IsNullOrEmpty(UserWindowsName)) {
lsWindowsNameStr = "(sAMAccountName=" + UserWindowsName + "*)";
}

DirectoryEntry objDE = GetDirectoryObject();
DirectorySearcher objDS = new DirectorySearcher(objDE);
objDS.SearchRoot = objDE;
objDS.Filter = "(&(objectClass=user)" + lsEmailStr + lsLastNameStr + lsFirstNameStr + lsWindowsNameStr + ")";
objDS.PageSize = 1000;
SearchResultCollection colResults = objDS.FindAll();

if (colResults != null) {

foreach (SearchResult objResult in colResults) {
YourControl.Add(GetProperty(objResult, "cn"), GetProperty(objResult, "sAMAccountName"), GetProperty(objResult, "givenName"), GetProperty(objResult, "SN"), GetProperty(objResult, "mail"), GetProperty(objResult, "description"));
}
}

objDS.Dispose();
objDE.Dispose();

private string GetProperty(SearchResult searchResult, string PropertyName) {
if (searchResult.Properties.Contains(PropertyName)) {
return searchResult.Properties[PropertyName][0].ToString();
} else {
return string.Empty;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: