#author("2021-11-26T08:43:35+09:00","","") [[ソフトウェア開発>SoftwareEngineering]] / [[VB.NET>VB.NET]] / [[Active Directory>ActiveDirectory]] / [[DirectoryEntry>./]] #author("2021-11-26T08:44:19+09:00","","") [[ソフトウェア開発>SoftwareEngineering]] / [[VB.NET>VB.NET]] / Active Directory / [[DirectoryEntry>./]] *メンバの存在チェック [#k0f8093b] グループのメンバは一度に1,500件しか取得することができない。 それを超えるている場合は、1,500件までしか取得していないので注意すること。 IsMemberメソッドを使用すれば問題が解決するように見えるが、これだと別の問題が出てくる。 グループのスコープがドメイン ローカルであるグループに対して、同一フォレストの別ドメインのオブジェクトを探そうとすると例外が発生する。 同一ドメインのみであれば問題ないが、別ドメインが絡むのであれば他の手法を考えたほうがよい。 -1,500件の壁を越えられない #highlightjs([vbnet]) 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") -1,500件の壁を越えられる #highlightjs([vbnet]) 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"}) *オブジェクトを削除する [#b08b6d09] DeleteTreeメソッドは対象エントリを含むサブツリー全体を削除する。 ここで勘違いしやすいのがユーザーやグループを削除する場合でも[サブツリーの削除]が許可されている必要がある。 -サブツリーの削除が許可されている必要がある #highlightjs([vbnet]) Dim group As DirectoryEntry = New DirectoryEntry("LDAP://DC01.codereign.org/CN=group0001,OU=Users,DC=codereign,DC=org") group.DeleteTree() group.CommitChanges() -サブツリーの削除が許可されていなくても平気 #highlightjs([vbnet]) 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() *グループのメンバを追加/削除する [#r8ba224c] グループのメンバを追加/削除する場合に注意点があります。 メンバとするオブジェクトの作成とメンバの追加/削除(削除はありえないが……)の間隔が短いと同期の問題でオブジェクトが存在しない(エラーコード:0x80072030)例外が発生する可能性があります。 まだ推測の域を出ていないが、オブジェクトを作成したドメインコントローラーを指定すれば回避できるはず。 -ドメインコントローラーを指定しないケース #highlightjs([vbnet]) 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() -ドメインコントローラーを指定するケース group.CommitChanges()は必要ない。 #highlightjs([vbnet]) 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"})