3

を使用するDirectoryEntryと、新しいユーザー アカウントの CN を設定できますが、UserPrincipal? プロパティは読み取り専用です。

// From : http://msdn.microsoft.com/en-us/magazine/cc135979.aspx
DirectoryEntry container = new DirectoryEntry("LDAP://ou=TechWriters,dc=fabrikam,dc=com"); 

// create a user directory entry in the container 
DirectoryEntry newUser = container.Children.Add("cn=user1Acct", "user"); 
// add the samAccountName mandatory attribute 
newUser.Properties["sAMAccountName"].Value = "User1Acct"; 
// save to the directory 
newUser.CommitChanges();

ただし、UserPrincipal を使用する場合:

// For the example
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain, null, "ou=TechWriters,dc=fabrikam,dc=com")
{
    using (UserPrincipal user = new UserPrincipal(ctx, "User1Acct", "pwd", true))
    {
         // I would like to do :
         user.DistinguishedName = "user1Acct";
         //
         user.Save();
    }
}
4

1 に答える 1

4

あなたが望む答えではありませんが、私の知る限り、そのように実行することはできません... CNはユーザープリンシプルクラスから「保護」されています。他の場所では、安定した情報に依存しているためです。

なぜ混同するのかわかりませんが、これを試すことができます:

using (var ctx = new PrincipalContext(ContextType.Domain, null, "ou=TechWriters,dc=fabrikam,dc=com"))
        {
            using (var user = new UserPrincipal(ctx, "User1Acct", "pwd", true))
            {
                user.Save();
            }

            using (var entry = new DirectoryEntry("LDAP://cn=User1Acct;ou=TechWriters,dc=fabrikam,dc=com",null,null,AuthenticationTypes.Secure))
            {
                entry.Rename("cn=user1Acct");
            }
        }

(おそらくハードコーディングではなく、userPrinciple から LDAP 文字列を取得します)

私はこれをテストする可能性を持っていません..

于 2013-10-31T13:54:47.407 に答える