web-dev-qa-db-ja.com

.NETでActive Directoryグループにユーザーを追加および削除する

C#でActive Directoryからユーザーを追加および削除するには、次のメソッドを作成しています。

void AddUserToGroup(string userId, string groupName);
void RemoveUserFromGroup(string userId, string groupName);

これらのメソッドを実装する最適な方法は?

CodeProjectのコードを次に示します。ただし、これらの例でADサーバーが指定されている場所がわかりませんか? (LDAPプロトコルを使用する場合、.NETフレームワークによって暗黙的に提供されますか?)。これらの例は従う価値がありますか?

public void AddToGroup(string userDn, string groupDn)
{
    try
    {
        DirectoryEntry dirEntry = new DirectoryEntry("LDAP://" + groupDn);
        dirEntry.Properties["member"].Add(userDn);
        dirEntry.CommitChanges();
        dirEntry.Close();
    }
    catch (System.DirectoryServices.DirectoryServicesCOMException E)
    {
        //doSomething with E.Message.ToString();

    }
}


public void RemoveUserFromGroup(string userDn, string groupDn)
{
    try
    {
        DirectoryEntry dirEntry = new DirectoryEntry("LDAP://" + groupDn);
        dirEntry.Properties["member"].Remove(userDn);
        dirEntry.CommitChanges();
        dirEntry.Close();
    }
    catch (System.DirectoryServices.DirectoryServicesCOMException E)
    {
        //doSomething with E.Message.ToString();

    }
}
40
Ben

あーLDAP。 .Net Framework 3.5以降を使用している場合、System.DirectoryServices.AccountManagement名前空間を使用することを強くお勧めします。これにより、物事soがはるかに簡単になります。

public void AddUserToGroup(string userId, string groupName) 
{ 
    try 
    { 
        using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "COMPANY"))
        {
            GroupPrincipal group = GroupPrincipal.FindByIdentity(pc, groupName);
            group.Members.Add(pc, IdentityType.UserPrincipalName, userId);
            group.Save();
        }
    } 
    catch (System.DirectoryServices.DirectoryServicesCOMException E) 
    { 
        //doSomething with E.Message.ToString(); 

    } 
} 

public void RemoveUserFromGroup(string userId, string groupName)
{   
    try 
    { 
        using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "COMPANY"))
        {
            GroupPrincipal group = GroupPrincipal.FindByIdentity(pc, groupName);
            group.Members.Remove(pc, IdentityType.UserPrincipalName, userId);
            group.Save();
        }
    } 
    catch (System.DirectoryServices.DirectoryServicesCOMException E) 
    { 
        //doSomething with E.Message.ToString(); 

    }
}
78
Jacob Proffitt

サーバーはgroupDn変数値の一部です。例えば:

LDAP://myServer/CN=MyGroup,CN=Groups,CN=MyContainer,DN=mydomain.com

全体がグループのLDAPパスです。最初の部分(myServer)はサーバー名です。

サーバー名の後の部分(例:CN = ...)は、グループのDN(識別名)です。

3
Mike Marshall

public void RemoveUserFromGroup(string userDn, string groupDn)のメンバーを削除するとき

dirEntry.Properties["member"].Remove(userDn)は機能しません。

dirEntry.Properties["member"].RemoveAt(dn.IndexOf(dn))は機能します。

2
Andy

DirectoryEntryへのパス引数にLDAPサーバーを配置できます。つまり、「LDAP://」+ ldapServer + ldapQueryです。

認証が必要な場合は、DirectoryEntry(String path、String userId、String password)を使用します

1
Mason