繁体   English   中英

无法从Active Directory检索EmployeeId

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM