[英]How do I set the Manager Attribute on the UserPrincipal object in Active Directory in C#
I am trying to set the attribute Manager
on an object of type UserPrincipal
documented here: 我正在尝试在此处记录的
UserPrincipal
类型的对象上设置属性Manager
:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms680857(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/windows/desktop/ms680857(v=vs.85).aspx
but cannot simply say 但不能简单地说
UserPrincipal.Manager = "some value"
Can someone please explain to me how this works? 有人可以向我解释一下这是如何工作的吗? Thanks!
谢谢!
The basic UserPrincipal
in the S.DS.AM namespace does not feature that attribute - but you can extend the user principal class and add additional attributes that you need. S.DS.AM命名空间中的基本
UserPrincipal
不具有该属性 - 但您可以扩展用户主体类并添加所需的其他属性。
Read more about it here: 在这里阅读更多相关信息:
Managing Directory Security Principals in the .NET Framework 3.5 管理.NET Framework 3.5中的目录安全性主体
( there's a section on extensibility towards the end of the article ) ( 关于文章末尾的可扩展性部分 )
Here's the code: 这是代码:
[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);
}
}
Now you can find and work with a UserPrincipalEx
class which has the .Manager
property for you to use: 现在,您可以找到并使用具有
.Manager
属性的UserPrincipalEx
类供您使用:
UserPrincipalEx userEx = UserPrincipalEx.FindByIdentity(ctx, "YourUserName");
// the .Manager property contains the DN (distinguished name) for the manager of this user
var yourManager = userEx.Manager;
I love the example but totally get where the RatBoyStl is coming from. 我喜欢这个例子,但完全得到了RatBoyStl的来源。 Sometimes you just want a value and not a new class.
有时你只想要一个值而不是一个新类。
If you have a UserPrinciple
object for a given user then you can easily retrieve the manager property with this code. 如果您有给定用户的
UserPrinciple
对象,则可以使用此代码轻松检索manager属性。 I took it a step futher and used the manager value to find their UserPrinciple
and display the email address. 我
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.