【问题标题】:Get company field of organization?获取公司组织领域?
【发布时间】:2012-04-03 23:26:51
【问题描述】:

我想知道是否有人知道如何使用DirectorySearcherPrincipalSearcher 获取公司组织领域?

非常感谢,

维克多·卡斯特罗

【问题讨论】:

    标签: c# active-directory


    【解决方案1】:

    将“公司”添加到 DirectorySearcher 的 PropertiesToLoad 属性中:

    var ds = new DirectorySearcher(ldapRoot);
    ds.PropertiesToLoad.Add("company");
    var directoryEntry = ds.FindOne();
    ...
    Console.WriteLine(directoryEntry.Properties["company"]);
    

    【讨论】:

      【解决方案2】:

      下面是我几年前写的用来​​提取这些信息的类。

      我已经很多年不用深入研究代码了,所以它一定工作得很好。

      希望你能从中得到一些用处。

      class ADProperties {
        public const string OBJECTCLASS = "objectClass";
        public const string CONTAINERNAME = "cn";
        public const string LASTNAME = "sn";
        public const string COUNTRYNOTATION = "c";
        public const string CITY = "l";
        public const string STATE = "st";
        public const string TITLE = "title";
        public const string POSTALCODE = "postalCode";
        public const string PHYSICALDELIVERYOFFICENAME = "physicalDeliveryOfficeName";
        public const string FIRSTNAME = "givenName";
        public const string MIDDLENAME = "initials";
        public const string DISTINGUISHEDNAME = "distinguishedName";
        public const string INSTANCETYPE = "instanceType";
        public const string WHENCREATED = "whenCreated";
        public const string WHENCHANGED = "whenChanged";
        public const string DISPLAYNAME = "displayName";
        public const string USNCREATED = "uSNCreated";
        public const string MEMBEROF = "memberOf";
        public const string USNCHANGED = "uSNChanged";
        public const string COUNTRY = "co";
        public const string DEPARTMENT = "department";
        public const string COMPANY = "company";
        public const string PROXYADDRESSES = "proxyAddresses";
        public const string STREETADDRESS = "streetAddress";
        public const string DIRECTREPORTS = "directReports";
        public const string NAME = "name";
        public const string OBJECTGUID = "objectGUID";
        public const string USERACCOUNTCONTROL = "userAccountControl";
        public const string BADPWDCOUNT = "badPwdCount";
        public const string CODEPAGE = "codePage";
        public const string COUNTRYCODE = "countryCode";
        public const string BADPASSWORDTIME = "badPasswordTime";
        public const string LASTLOGOFF = "lastLogoff";
        public const string LASTLOGON = "lastLogon";
        public const string PWDLASTSET = "pwdLastSet";
        public const string PRIMARYGROUPID = "primaryGroupID";
        public const string OBJECTSID = "objectSid";
        public const string ADMINCOUNT = "adminCount";
        public const string ACCOUNTEXPIRES = "accountExpires";
        public const string LOGONCOUNT = "logonCount";
        public const string LOGINNAME = "sAMAccountName";
        public const string SAMACCOUNTTYPE = "sAMAccountType";
        public const string SHOWINADDRESSBOOK = "showInAddressBook";
        public const string LEGACYEXCHANGEDN = "legacyExchangeDN";
        public const string USERPRINCIPALNAME = "userPrincipalName";
        public const string EXTENSION = "ipPhone";
        public const string SERVICEPRINCIPALNAME = "servicePrincipalName";
        public const string OBJECTCATEGORY = "objectCategory";
        public const string DSCOREPROPAGATIONDATA = "dSCorePropagationData";
        public const string LASTLOGONTIMESTAMP = "lastLogonTimestamp";
        public const string EMAILADDRESS = "mail";
        public const string MANAGER = "manager";
        public const string MOBILE = "mobile";
        public const string PAGER = "pager";
        public const string FAX = "facsimileTelephoneNumber";
        public const string HOMEPHONE = "homePhone";
        public const string MSEXCHUSERACCOUNTCONTROL = "msExchUserAccountControl";
        public const string MDBUSEDEFAULTS = "mDBUseDefaults";
        public const string MSEXCHMAILBOXSECURITYDESCRIPTOR = "msExchMailboxSecurityDescriptor";
        public const string HOMEMDB = "homeMDB";
        public const string MSEXCHPOLICIESINCLUDED = "msExchPoliciesIncluded";
        public const string HOMEMTA = "homeMTA";
        public const string MSEXCHRECIPIENTTYPEDETAILS = "msExchRecipientTypeDetails";
        public const string MAILNICKNAME = "mailNickname";
        public const string MSEXCHHOMESERVERNAME = "msExchHomeServerName";
        public const string MSEXCHVERSION = "msExchVersion";
        public const string MSEXCHRECIPIENTDISPLAYTYPE = "msExchRecipientDisplayType";
        public const string MSEXCHMAILBOXGUID = "msExchMailboxGuid";
        public const string NTSECURITYDESCRIPTOR = "nTSecurityDescriptor";
      }
      
      public class ADUser {
      
        #region ' Properties '
        public string City { get; private set; }
        public string Company { get; private set; }
        public string Country { get; private set; }
        public string Department { get; private set; }
        public string EmailAddress { get; private set; }
        public string Extension { get; private set; }
        public string Fax { get; private set; }
        public string FirstName { get; private set; }
        public string HomePhone { get; private set; }
        public string LastName { get; private set; }
        public string UserName { get; private set; }
        public string LoginNameWithDomain { get; private set; }
        public string FullName {
         get {
          if (!String.IsNullOrEmpty(FirstName)) {
            if (!String.IsNullOrEmpty(LastName)) {
              return string.Format("{0} {1}", FirstName, LastName);
            } else {
              return FirstName;
            }
          } else if (!String.IsNullOrEmpty(LastName)) {
            return LastName;
          } else {
            return null;
          }
         }
        }
      
        public string MiddleName { get; private set; }
        public string Mobile { get; private set; }
        public string PostalCode { get; private set; }
        public string StreetAddress { get; private set; }
        public string State { get; private set; }
        public string Title { get; private set; }
        #endregion
      
        private ADUser(DirectoryEntry directoryUser) {
          FirstName = GetProperty(directoryUser, ADProperties.FIRSTNAME);
          MiddleName = GetProperty(directoryUser, ADProperties.MIDDLENAME);
          LastName = GetProperty(directoryUser, ADProperties.LASTNAME);
          UserName = GetProperty(directoryUser, ADProperties.LOGINNAME);
          string userPrincipalName = GetProperty(directoryUser, ADProperties.USERPRINCIPALNAME);
          string domainAddress = (!String.IsNullOrEmpty(userPrincipalName)) ? userPrincipalName.Split('@')[1] : null;
          string domainName = (!String.IsNullOrEmpty(domainAddress)) ? domainAddress.Split('.')[0] : null;
          LoginNameWithDomain = String.Format(@"{0}\{1}", domainName, UserName);
          StreetAddress = GetProperty(directoryUser, ADProperties.STREETADDRESS);
          City = GetProperty(directoryUser, ADProperties.CITY);
          State = GetProperty(directoryUser, ADProperties.STATE);
          PostalCode = GetProperty(directoryUser, ADProperties.POSTALCODE);
          Country = GetProperty(directoryUser, ADProperties.COUNTRY);
          Company = GetProperty(directoryUser, ADProperties.COMPANY);
          Department = GetProperty(directoryUser, ADProperties.DEPARTMENT);
          HomePhone = GetProperty(directoryUser, ADProperties.HOMEPHONE);
          Extension = GetProperty(directoryUser, ADProperties.EXTENSION);
          Mobile = GetProperty(directoryUser, ADProperties.MOBILE);
          Fax = GetProperty(directoryUser, ADProperties.FAX);
          EmailAddress = GetProperty(directoryUser, ADProperties.EMAILADDRESS);
          Title = GetProperty(directoryUser, ADProperties.TITLE);
        }
      
        private static string GetProperty(DirectoryEntry userDetail, string propertyName) {
          if (userDetail.Properties.Contains(propertyName)) {
            return userDetail.Properties[propertyName][0].ToString();
          } else {
            return null;
          }
        }
      
        public static ADUser GetUser(DirectoryEntry directoryUser) {
          return new ADUser(directoryUser);
        }
      
        public override string ToString() {
          if (!String.IsNullOrEmpty(EmailAddress)) {
            return string.Format("{0} <{1}>", FullName, EmailAddress);
          } else {
            return FullName;
          }
        }
      }
      

      【讨论】:

      • 如果您已经在 directoryEntry 中检索了公司属性,这将起作用。如果您使用尚未加载公司属性的 DirectoryEntry 对象调用 ADUser 构造函数,它看起来会返回 null。
      • 嗯……也许吧。我有另一个课程与这两个小课程一起使用,但我的另一个课程充满了 OP 可能不想要的个人公司特定信息。我会把它留在这里以供参考,但承认你的版本是更好的答案。
      • 感谢 Jaymz 和 jp2code,我创建了 GetProperty 方法并成功了。我想知道是否可以搜索传递价值的公司,而不是比较价值?因为这样,我必须比较所有用户的值,直到比较返回 true。问候,维克多
      • Victor,据我所知,这是 Active Directory 的“安全功能”——实际上无法从外部搜索。
      猜你喜欢
      • 1970-01-01
      • 2012-08-15
      • 1970-01-01
      • 2015-10-27
      • 2021-08-02
      • 1970-01-01
      • 2017-05-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多