我試圖設置屬性Manager
UserPrincipal
類型的對象這裏記錄上:如何設置在C#在Active Directory中UserPrincipal對象的經理屬性
http://msdn.microsoft.com/en-us/library/windows/desktop/ms680857(v=vs.85).aspx
,但不能簡單地說
UserPrincipal.Manager = "some value"
有人可以請向我解釋這是如何工作的?謝謝!
我試圖設置屬性Manager
UserPrincipal
類型的對象這裏記錄上:如何設置在C#在Active Directory中UserPrincipal對象的經理屬性
http://msdn.microsoft.com/en-us/library/windows/desktop/ms680857(v=vs.85).aspx
,但不能簡單地說
UserPrincipal.Manager = "some value"
有人可以請向我解釋這是如何工作的?謝謝!
S.DS.AM命名空間中的基本UserPrincipal
不具有該屬性 - 但您可以擴展用戶主體類並添加所需的其他屬性。
瞭解更多關於在這裏:
Managing Directory Security Principals in the .NET Framework 3.5
(有朝着製品結束對擴展一節)
下面的代碼:
[DirectoryRdnPrefix("CN")]
[DirectoryObjectClass("Person")]
public class UserPrincipalEx : UserPrincipal
{
// Inplement the constructor using the base class constructor.
public UserPrincipalEx(PrincipalContext context) : base(context)
{ }
// Implement the constructor with initialization parameters.
public UserPrincipalEx(PrincipalContext context,
string samAccountName,
string password,
bool enabled) : base(context, samAccountName, password, enabled)
{}
// Create the "Manager" property.
[DirectoryProperty("manager")]
public string Manager
{
get
{
if (ExtensionGet("manager").Length != 1)
return string.Empty;
return (string)ExtensionGet("manager")[0];
}
set { ExtensionSet("manager", value); }
}
// Implement the overloaded search method FindByIdentity.
public static new UserPrincipalEx FindByIdentity(PrincipalContext context, string identityValue)
{
return (UserPrincipalEx)FindByIdentityWithType(context, typeof(UserPrincipalEx), identityValue);
}
// Implement the overloaded search method FindByIdentity.
public static new UserPrincipalEx FindByIdentity(PrincipalContext context, IdentityType identityType, string identityValue)
{
return (UserPrincipalEx)FindByIdentityWithType(context, typeof(UserPrincipalEx), identityType, identityValue);
}
}
現在你可以找到並使用一個UserPrincipalEx
類,其中有.Manager
物業供您使用:
UserPrincipalEx userEx = UserPrincipalEx.FindByIdentity(ctx, "YourUserName");
// the .Manager property contains the DN (distinguished name) for the manager of this user
var yourManager = userEx.Manager;
我喜歡的例子,但完全得到RatBoyStl來自哪裏。有時你只想要一個價值而不是一個新的課程。
如果您有給定用戶的UserPrinciple
對象,那麼您可以使用此代碼輕鬆檢索管理器屬性。我向前邁了一步,用經理價值找到他們的UserPrinciple
並顯示電子郵件地址。
//set the principal context to the users domain
PrincipalContext pc = new PrincipalContext(ContextType.Domain, userDomain);
//lookup the user id on the domain
UserPrincipal up = UserPrincipal.FindByIdentity(pc, userId);
if (up == null)
{
Console.WriteLine(string.Format("AD USER NOT FOUND {0}", userGc));
return;
}
//grab the info we need from the domain
Console.WriteLine(up.ToString());
DirectoryEntry d = up.GetUnderlyingObject() as DirectoryEntry;
string managerCN = d.Properties["manager"].Value.ToString();
Console.WriteLine(managerCN);
UserPrincipal manager = UserPrincipal.FindByIdentity(pc, managerCN);
Console.WriteLine(manager.EmailAddress);
我有可怕的運氣讓PrincipalEx Save實際保存在Active Directory中,但GetUnderlyingObject()方法簡化了使用舊的方式設置屬性[X] ...謝謝。 – Dscoduc
我想我必須爲每一個屬性是不是UserPrincipal類的「標準」部分,如電子郵件地址或自定義屬性,如WorkCellPhone做到這一點? – RatBoyStl
@ user574376:是的 - 但是當然,您可以有一個包含所有這些屬性的UserPrincipalEx'類 - 這就是我所擁有的,上面的代碼只是我真正的類中的一小部分。 –
有沒有更簡單的方法來做到這一點?像我在搜索初始UserPrincipal對象時調用PropertiesToLoad一樣?這似乎需要很多工作才能完成。 – RatBoyStl