2

我需要读/写 ActiveDirectory 用户对象终端服务属性。我试过这个:

PrincipalContext context = new PrincipalContext(ContextType.Domain, "CA");

        using (context)
        {
            UserPrincipal user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, "CA\\vlekovic");
            if (user != null)
            {
                DirectoryEntry entry = (DirectoryEntry)user.GetUnderlyingObject();
                entry.Properties["msTSProfilePath"].Value = "";
                entry.Properties["msTSHomeDirectory"].Value = "";
                entry.Properties["msTSHomeDrive"].Value = "";
                entry.CommitChanges();
            }

        }

我试过这个:

PrincipalContext context = new PrincipalContext(ContextType.Domain, "CA");

        using (context)
        {
            UserPrincipal user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, "CA\\vlekovic");
            if (user != null)
            {
                DirectoryEntry entry = (DirectoryEntry)user.GetUnderlyingObject();
                entry.InvokeSet("msTSProfilePath", "");
                entry.InvokeSet("msTSHomeDirectory", "");
                entry.InvokeSet("msTSHomeDrive", "");
                entry.CommitChanges();
            }

        }

但没有任何效果。

我还尝试了以下属性名称:

  • 终端服务配置文件路径
  • 终端服务首页目录
  • 终端服务HomeDrive

但没有运气。任何帮助,将不胜感激!

谢谢, 沃金

4

2 回答 2

0

如果您使用 .NET 3.5 及更高版本并使用System.DirectoryServices.AccountManagement(S.DS.AM) 命名空间,则可以轻松扩展现有UserPrincipal类以获得更高级的属性,例如Manager等。

在这里阅读所有相关信息:

基本上,您只需定义一个基于 的派生类UserPrincipal,然后定义您想要的附加属性:

[DirectoryRdnPrefix("CN")]
[DirectoryObjectClass("Person")]
public class UserPrincipalEx : UserPrincipal
{
    // Implement 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 "TermSrvProfilePath" property.    
    [DirectoryProperty("msTSProfilePath")]
    public string TermSrvProfilePath
    {
        get
        {
            if (ExtensionGet("msTSProfilePath").Length != 1)
                return string.Empty;

            return (string)ExtensionGet("msTSProfilePath")[0];
        }
        set { ExtensionSet("msTSProfilePath", value); }
    }
}

现在,您可以在代码中使用“扩展”版本UserPrincipalEx

using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
{
    // Search the directory for the new object. 
    UserPrincipalEx inetPerson = UserPrincipalEx.FindByIdentity(ctx, IdentityType.SamAccountName, "someuser");

    // you can easily access the TermSrvProfilePath now
    string path = inetPerson.TermSrvProfilePath;
}        

同样,您还可以添加您要查找的其他属性。

于 2013-06-06T17:28:15.963 回答
0

我完全按照你告诉我们的方式做了。

我尝试使用其他字段作为

    [DirectoryProperty("wWWHomePage")]
    public string wWWHomePage
    {
        get
        {
            if (ExtensionGet("wWWHomePage").Length != 1)
                return null;

            return (string)ExtensionGet("wWWHomePage")[0];

        }
        set { this.ExtensionSet("wWWHomePage", value); }
    }

但是使用 TermSrvProfilePath ,它总是返回 "empty" ...

于 2015-07-21T08:49:40.537 回答