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();
}
}
あー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();
}
}
サーバーはgroupDn変数値の一部です。例えば:
LDAP://myServer/CN=MyGroup,CN=Groups,CN=MyContainer,DN=mydomain.com
全体がグループのLDAPパスです。最初の部分(myServer)はサーバー名です。
サーバー名の後の部分(例:CN = ...)は、グループのDN(識別名)です。
public void RemoveUserFromGroup(string userDn, string groupDn)
のメンバーを削除するとき
dirEntry.Properties["member"].Remove(userDn)
は機能しません。
dirEntry.Properties["member"].RemoveAt(dn.IndexOf(dn))
は機能します。
DirectoryEntryへのパス引数にLDAPサーバーを配置できます。つまり、「LDAP://」+ ldapServer + ldapQueryです。
認証が必要な場合は、DirectoryEntry(String path、String userId、String password)を使用します