2

さて、今の私の問題は、ActiveDirectory内の別のグループにユーザーを追加するコードを書き込もうとしていることです。これが私たちが書いた解決策です。

主な方法の一部:

string newGroup = "TestDelete";
string userName = result.Properties["cn"][0].ToString();
string adduser = ad.AddToGroup(userName, newGroup);
Console.WriteLine(String.Format("{0} : {1}",userName, adduser)); 

別のクラスからこのメソッドを呼び出すもの:

public String AddToGroup(string userDn, string groupDn)
{
    try
    {
        DirectoryEntry ldapConnection = new DirectoryEntry("LDAP://OU=" + groupDn + ",DC=blah,DC=blah,DC=blah");
        ldapConnection.AuthenticationType = AuthenticationTypes.Secure;

        string newUser = "CN=" + userDn + "CN=Members,DC=blah,DC=blah,DC=blah";

        ldapConnection.Invoke("Add", new object[] { newUser });
        ldapConnection.CommitChanges();
        ldapConnection.Close();

        return "Success";
    }
    catch (System.DirectoryServices.DirectoryServicesCOMException E)
    {
        Console.WriteLine("Exception caught:\n\n" + E.ToString());
    }
}

例外を投げています

System.Runtime.InteropServices.COMException(0x80020006):不明な名前。(HRESULTからの例外:0x80020006(DISP_E_UNKNOWNNAME)) C:\ Users \ XXX \ Documents \のadjustUsers.Program.AddToGroup(String userDn、String groupDn)
のSystem.DirectoryServices.DirectoryEntry.InvokeSet(String propertyName、Object [] args)
Visual Studio 2010 \ Projects \ UserPruning \ AdjustUsers \ Program.cs:line 45
at UserPruning.MainProgram.Main(String [] args)in C:\ Users \ XXX \ Documents \ Visual Studio 2010 \ Projects \ UserPruning \ UserPruning\MainProgram。 cs:line 46

これは、私たちが見つけた限りでは、構文に問題があることを示しています。

46行目は

string adduser = ad.AddToGroup(userName,newGroup)

45行目は

ldapConnection.Invoke("Add", new object[] {newUser});

私たちは最後の日のためにこのコードを書き直そうとしてきましたが、まだ困惑しています。

ヘルプ?

ありがとう

4

1 に答える 1

7

.NET 3.5以降を使用している場合は、System.DirectoryServices.AccountManagement(S.DS.AM)名前空間を確認する必要があります。ここでそれについてすべて読んでください:

基本的に、ドメインコンテキストを定義して、AD内のユーザーやグループを簡単に見つけることができます。

// set up domain context
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
{
    // find your user
    UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "SomeUserName");

    if(user != null)
    {
        // find the group in question
        GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, "TestDelete");

        // if found....
        if (group != null)
        {
            // add user to group
            group.Members.Add(user);
            group.Save();
        }
    }
}

新しいS.DS.AMを使用すると、ADのユーザーやグループを簡単に操作できます。

于 2013-02-07T05:36:39.990 に答える