Мой метод GetActiveDirectory()
используется для получения данных из Active Directory с использованием SamAccountName
, и он работает, но проблема заключается в том, что проблема user.EmployeeId
не возвращает никаких признаков.Не удается получить EmployeeId из Active Directory
Почему я не могу получить EmployeeId
и как его исправить?
Это мои коды:
public void GetActiveDirectory(DataTable DataStorage, string SamAccountName)
{
var domainContext = new PrincipalContext(
ContextType.Domain, null, _ldapPath, _ldapUsername, _ldapPassword);
var group = GroupPrincipal.FindByIdentity(domainContext, "Domain Users");
if (group != null)
{
DataStorage.Columns.Add("SamAccountName");
DataStorage.Columns.Add("Surname");
DataStorage.Columns.Add("Guid");
DataStorage.Columns.Add("Enabled");
DataStorage.Columns.Add("GivenName");
DataStorage.Columns.Add("EmailAddress");
DataStorage.Columns.Add("SID");
DataStorage.Columns.Add("DateCreated");
DataStorage.Columns.Add("DateModified");
DataStorage.Columns.Add("EmployeeNumber");
DataStorage.AcceptChanges();
foreach (var p in group.GetMembers(false))
{
if(p.SamAccountName != null)
{
try
{
var user = UserPrincipal.FindByIdentity(
domainContext, IdentityType.SamAccountName, SamAccountName);
if (user != null)
{
var userDE = (DirectoryEntry)p.GetUnderlyingObject();
DateTime dateCreated = userDE.Properties["WhenCreated"].Value != null
? (DateTime)userDE.Properties["WhenCreated"].Value
: DateTime.MinValue;
DateTime dateModified = userDE.Properties["WhenChanged"].Value != null
? (DateTime)userDE.Properties["WhenChanged"].Value
: DateTime.MinValue;
DataRow dr = DataStorage.NewRow();
dr["SamAccountName"] = user.SamAccountName;
dr["Surname"] = user.Surname;
dr["Guid"] = user.Guid.ToString();
dr["Enabled"] = user.Enabled;
dr["GivenName"] = user.GivenName;
dr["EmailAddress"] = user.EmailAddress;
dr["SID"] = user.Sid.Value;
dr["EmployeeNumber"] = user.EmployeeId; //Always give an empty space or null.
dr["DateCreated"] = dateCreated;
dr["DateModified"] = dateModified;
DataStorage.Rows.Add(dr);
return;
}
}
catch { }
break;
}
}
}
}
В 'group.GetMembers()' уже возвращает пользователей - Почему вы называете '.FindByIdentity()' на каждого найденного пользователя еще раз, чтобы получить объект пользователя ?? Не имеет для меня никакого смысла .... –
@marc_s Первый '.FIndByIdentity()' предназначен для групп пользователей, группа «Пользователи домена», а вторая используется для того, чтобы получить одного пользователя в «Пользователи домена», группа. –
Да, я вижу, но второй - ** бессмысленно ** - 'group.GetMembers()' ** уже ** возвращает члены 'UserPrincipal' ... вы должны просто использовать их - а не искать выборку пользователь * снова * .... –