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();
            }

        }

しかし、何も機能しません。

次のプロパティ名でも試しました:

  • ターミナル サービス プロファイル パス
  • ターミナル サービス ホーム ディレクトリ
  • ターミナルサービスホームドライブ

しかし、運がありません。どんな助けでも大歓迎です!

ありがとう、ヴォジン

4

2 に答える 2

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 では、常に「空」を返します...

于 2015-07-21T08:49:40.537 に答える
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 に答える