指定のグループに指定のユーザーが参加しているをプログラムから知る方法。
(指定ユーザーが所属しているグループの一覧を得るわけではない点に注意)
- 事前準備
- .NET の参照設定で、System.DirectoryServices を追加する。
- COM の参照設定で、"Active DS Type Library" を追加する。
- ドメインのユーザーが、ドメインのグループに参加しているかを確認する場合は、以下で確認できます。
' Domain User - Domain Group Dim groupName = "WinNT://domain/group" Dim userName = "WinNT://domain/user" Dim dsEntry = New System.DirectoryServices.DirectoryEntry(groupName) Dim domainGroup = CType(dsEntry.NativeObject, ActiveDs.IADsGroup) MsgBox(domainGroup.IsMember(userName))
- ドメインのユーザーが、ローカルのグループに参加しているかを確認する場合は、グループ名とユーザーの指定の部分を以下のように変更します。
Dim groupName = "WinNT://domain/" & System.Environment.MachineName & "/group" Dim userName = "WinNT://domain/user"
- ローカルのユーザーが、ローカルのグループに参加しているかを確認する場合は、グループ名とユーザーの指定の部分を以下のように変更します。
Dim groupName = "WinNT://domain/" & System.Environment.MachineName & "/group" Dim userName = "WinNT://domain/" & System.Environment.MachineName & "/user"
上記の domain にはドメイン名またはワークグループ名を指定します。
user には ユーザー名、group にはグループ名を指定します。注意点は、ローカルユーザーやローカルグループであっても、そのマシンがドメインに参加していれば domain 部分には参加しているドメイン名を指定する必要があります。そのマシンがドメインに参加していない場合に、domain 部分にワークグループ名を指定します。
参考)
http://handcraft.blogsite.org/Memo/Article/Archives/150
p.s.
ADSI がリークするという話があり、上記とリンクするのかどうかは確認していません。メモとして記録しておきます。(http://blogs.technet.com/b/jpilmblg/archive/2010/05/14/adsi-winnt-adsopenobject.aspx)