SoftwareEngineering/ProgramLanguage/VB.NET
グループのメンバは一度に1,500件しか取得することができない。 それを超えるている場合は、1,500件までしか取得していないので注意すること。 IsMemberメソッドを使用すれば問題が解決するように見えるが、これだと別の問題が出てくる。 グループのスコープがドメイン ローカルであるグループに対して、同一フォレストの別ドメインのオブジェクトを探そうとすると例外が発生する。 同一ドメインのみであれば問題ないが、別ドメインが絡むのであれば他の手法を考えたほうがよい。
Dim group As DirectoryEntry = New DirectoryEntry("LDAP://DC01.codereign.org/CN=group0001,OU=Users,DC=codereign,DC=org") group.Properties("member").Contains("CN=user0001,OU=Users,DC=codereign,DC=org")
Dim group As DirectoryEntry = New DirectoryEntry("LDAP://DC01.codereign.org/CN=group0001,OU=Users,DC=codereign,DC=org") group.Invoke("IsMember", New Object() {"LDAP://DC01.codereign.org/CN=user0001,OU=Users,DC=codereign,DC=org"})
DeleteTreeメソッドは対象エントリを含むサブツリー全体を削除する。 ここで勘違いしやすいのがユーザーやグループを削除する場合でも[サブツリーの削除]が許可されている必要がある。
Dim group As DirectoryEntry = New DirectoryEntry("LDAP://DC01.codereign.org/CN=group0001,OU=Users,DC=codereign,DC=org") group.DeleteTree() group.CommitChanges()
Dim group As DirectoryEntry = New DirectoryEntry("LDAP://DC01.codereign.org/CN=group0001,OU=Users,DC=codereign,DC=org") group.Parent.Invoke("Delete", New String() {"group", String.Format("CN=user0001")}) group.CommitChanges()
グループのメンバを追加/削除する場合に注意点があります。 メンバとするオブジェクトの作成とメンバの追加/削除(削除はありえないが……)の間隔が短いと同期の問題でオブジェクトが存在しない(エラーコード:0x80072030)例外が発生する可能性があります。 まだ推測の域を出ていないが、オブジェクトを作成したドメインコントローラーを指定すれば回避できるはず。
Dim group As DirectoryEntry = New DirectoryEntry("LDAP://DC01.codereign.org/CN=group0001,OU=Users,DC=codereign,DC=org") group.Properties("member").Add("CN=user0001,OU=Users,DC=codereign,DC=org") group.CommitChanges() group.Properties("member").Remove("CN=user0001,OU=Users,DC=codereign,DC=org") group.CommitChanges()
Dim group As DirectoryEntry = New DirectoryEntry("LDAP://DC01.codereign.org/CN=group0001,OU=Users,DC=codereign,DC=org") group.Invoke("Add", New Object() {"LDAP://DC01.codereign.org/CN=user0001,OU=Users,DC=codereign,DC=org"}) group.Invoke("Remove", New Object() {"LDAP://DC01.codereign.org/CN=user0001,OU=Users,DC=codereign,DC=org"})