gpt4 book ai didi

c# - 我可以使用 PrincipalContext() 从 Active Directory 获取用户部门吗

转载 作者:行者123 更新时间:2023-12-04 03:05:20 25 4
gpt4 key购买 nike

我正在尝试从 Active Directory 中获取用户的部门。我有以下类(class):

public class DomainContext
{
public string DisplayName { get; set; }
public string Name { get; set; }
public string SamAccountName { get; set; }
public string DistinguishedName { get; set; }
public string UserPrincipalName { get; set; }
public string Department { get; set; }
}

然后使用下面的方法,我可以获得用户名、显示名称、sam 帐户等....

public override void getUserDepts(SPItemEventProperties properties)
{
base.ItemUpdating(properties);

string[] offices = new string[] { "OfficeA", "OfficeB", "OfficeC" };

string ADServerName = "*****";
string ADusername = "******";
string ADpassword = "*****";

using (var context = new PrincipalContext(ContextType.Domain, ADServerName, ADusername, ADpassword))
using (var searcher = new PrincipalSearcher(new UserPrincipal(context)))
{
var searchResults = searcher.FindAll();

foreach (Principal p in searchResults)
{
if (p.DistinguishedName.ToLower().Contains(offices[0].ToLower()) || p.DistinguishedName.ToLower().Contains(offices[1].ToLower()) || p.DistinguishedName.ToLower().Contains(offices[2].ToLower())))
{
DomainContext dc = new DomainContext();
dc.DisplayName = p.DisplayName;
dc.UserPrincipalName = p.UserPrincipalName;
dc.Name = p.Name;
dc.SamAccountName = p.SamAccountName;
dc.DistinguishedName = p.DistinguishedName;
// dc.Department = p. **CAN NOT GET THE DEPARTMENT NAME**
}
}
}
}

但我找不到如何获取部门名称。

最佳答案

您可以通过检查其DirectoryEntry

中的基础属性来访问该部门
var property = "department";
var directoryEntry = p.GetUnderlyingObject() as DirectoryEntry;
if (directoryEntry.Properties.Contains(property)) {
dc.Department = directoryEntry.Properties[property].Value.ToString();
}

可以考虑将上面的转换为扩展方法,减少重复代码。

我将用户属性列表编译成一个类作为常量

public static class ADUserProperties
{
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 static string GetProperty(this DirectoryEntry directoryEntry , string propertyName, int index = 0) {
if (directoryEntry.Properties.Contains(propertyName) && index > -1 && index < directoryEntry.Properties[propertyName].Count) {
return directoryEntry.Properties[propertyName][index].ToString();
} else {
return string.Empty;
}
}

public static string GetProperty(this Principal principal, string property) {
var directoryEntry = principal.GetUnderlyingObject() as DirectoryEntry;
return directoryEntry.GetProperty(property);
}

这将允许您的代码更新为

dc.Department = p.GetProperty(ADUserProperties.DEPARTMENT);

关于c# - 我可以使用 PrincipalContext() 从 Active Directory 获取用户部门吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45085818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com