[英]Can't retrieve EmployeeId from Active Directory
我的GetActiveDirectory()
方法用于使用SamAccountName
从Active Directory中获取数据,它可以正常工作,但问题是user.EmployeeId
返回数据标志。
为什么我不能收到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;
}
}
}
}
这是对 UserPrincipal.EmployeeId
的临时 UserPrincipal.EmployeeId
我不知道为什么UserPrincipal.EmployeeId
无法正常工作,所以我决定使用旧方法。
我尝试解决.EmployeeId
自己的问题的方法是使用System.DirectoryServices
返回
这是我使用System.DirectoryServices
获取EmployeeId
方法
var oDirecotyrEntry = new DirectoryEntry(
_ldapPath, _ldapUsername, _ldapPassword, AuthenticationTypes.Secure);
SearchResultCollection odrSearchResultCollection;
var odrUser = new DirectoryEntry();
var odrDirectorySearcher = new DirectorySearcher
{Filter = "sAMAccountName="+SamAccountName+"", SearchRoot = oDirecotyrEntry};
using(odrDirectorySearcher)
{
odrSearchResultCollection = odrDirectorySearcher.FindAll();
if(odrSearchResultCollection.Count > 0)
{
foreach(SearchResult result in odrSearchResultCollection)
{
var num = result.Properties["employeeNumber"];
foreach(var no in num)
{
dr["EmployeeNumber"] = no.ToString();
}
}
}
}
为了完成我的项目,我使用System.DirectoryServices.AccountManagement
var oPricipalContext = new PrincipalContext(
ContextType.Domain, _ldapPath2, _ldapUsername, _ldapPassword);
UserPrincipal oUserPrincipal = UserPrincipal.FindByIdentity(oPricipalContext, SamAccountName);
if (oUserPrincipal != null)
{
var oDateTime = (DirectoryEntry)oUserPrincipal.GetUnderlyingObject();
DateTime dateCreated = oDateTime.Properties["WhenCreated"].Value != null
? (DateTime)oDateTime.Properties["WhenCreated"].Value
: DateTime.MinValue;
DateTime dateChanged = oDateTime.Properties["WhenChanged"].Value != null
? (DateTime)oDateTime.Properties["WhenChanged"].Value
: DateTime.MinValue;
dr["SamAccountName"] = oUserPrincipal.SamAccountName;
dr["Surname"] = oUserPrincipal.Surname;
dr["Guid"] = oUserPrincipal.Guid.ToString();
dr["Enabled"] = oUserPrincipal.Enabled;
dr["GivenName"] = oUserPrincipal.GivenName;
dr["EmailAddress"] = oUserPrincipal.EmailAddress;
dr["SID"] = oUserPrincipal.Sid.Value;
dr["DateCreated"] = dateCreated;
dr["DateModified"] = dateChanged;
DataStorage.Rows.Add(dr);
}
System.DirectoryServices.AccountManagement
是我的项目所必需的,因此我需要使用它。
对不起,我的语法。
这是我的完整代码。
没有摘要格式???
using System.DirectoryServices;
using System.DirectoryServices.AccountManagement;
public void GetUsers(DataTable DataStorage, string SamAccountName)
{
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();
DataRow dr = DataStorage.NewRow();
//System.DirectoryServices
var oDirecotyrEntry = new DirectoryEntry(
_ldapPath, _ldapUsername, _ldapPassword, AuthenticationTypes.Secure);
SearchResultCollection odrSearchResultCollection;
var odrUser = new DirectoryEntry();
var odrDirectorySearcher = new DirectorySearcher
{Filter = "sAMAccountName="+SamAccountName+"", SearchRoot = oDirecotyrEntry};
using(odrDirectorySearcher)
{
odrSearchResultCollection = odrDirectorySearcher.FindAll();
if(odrSearchResultCollection.Count > 0)
{
foreach(SearchResult result in odrSearchResultCollection)
{
var num = result.Properties["employeeNumber"];
foreach(var no in num)
{
dr["EmployeeNumber"] = no.ToString();
}
}
}
}
//System.DirectoryServices.AccountManagement
var oPricipalContext = new PrincipalContext(
ContextType.Domain, _ldapPath2, _ldapUsername, _ldapPassword);
UserPrincipal oUserPrincipal = UserPrincipal.FindByIdentity(oPricipalContext, SamAccountName);
if (oUserPrincipal != null)
{
var oDateTime = (DirectoryEntry)oUserPrincipal.GetUnderlyingObject();
DateTime dateCreated = oDateTime.Properties["WhenCreated"].Value != null
? (DateTime)oDateTime.Properties["WhenCreated"].Value
: DateTime.MinValue;
DateTime dateChanged = oDateTime.Properties["WhenChanged"].Value != null
? (DateTime)oDateTime.Properties["WhenChanged"].Value
: DateTime.MinValue;
dr["SamAccountName"] = oUserPrincipal.SamAccountName;
dr["Surname"] = oUserPrincipal.Surname;
dr["Guid"] = oUserPrincipal.Guid.ToString();
dr["Enabled"] = oUserPrincipal.Enabled;
dr["GivenName"] = oUserPrincipal.GivenName;
dr["EmailAddress"] = oUserPrincipal.EmailAddress;
dr["SID"] = oUserPrincipal.Sid.Value;
dr["DateCreated"] = dateCreated;
dr["DateModified"] = dateChanged;
DataStorage.Rows.Add(dr);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.