前回作ったグループのツリー表示と逆で、今度はユーザに紐付くグループの一覧を表示できるようにしてみました。普通に一覧表示すると所属している最初のグループしか表示出来ないんだけど、このスクリプトを使えばActive Directory上の所属しているすべてのグループを一覧出来ます。
※ただしDomain Usersは表示されません。
また、以下の部分は環境に応じて変更してください。
DomainName = "dc=pnpk,dc=local"
Option Explicit Const ADS_SCOPE_SUBTREE = 2 Dim SQL,SQL_QUERY Dim DomainName '//////////////ドメイン名を入力////////////// DomainName = "dc=pnpk,dc=local" '追加検索条件 '(例) 'SQL_QUERY = " Name = 'administrator'" SQL_QUERY = "" 'SQL_QUERYに何か指定があった場合、ANDを追加 If SQL_QUERY <> "" Then SQL_QUERY = " AND " & SQL_QUERY End If SQL = "SELECT distinguishedName FROM 'LDAP://" &_ DomainName & "' WHERE objectCategory='user'" &_ SQL_QUERY 'QueryADSIの呼び出し Call QueryADSI(SQL) '////////////ADSIにクエリ問い合わせ//////////// 'SQLクエリでActive Directory内を検索します。 Function QueryADSI(SQL) Dim objConnection,objCommand Set objConnection =_ CreateObject("ADODB.Connection") Set objCommand =_ CreateObject("ADODB.Command") objConnection.Provider =_ "ADsDSOObject" objConnection.Open "Active Directory Provider" Set objCommand.ActiveConnection =_ objConnection objCommand.Properties("Page Size") = 1000 objCommand.Properties("Searchscope") =_ ADS_SCOPE_SUBTREE objCommand.CommandText = SQL Dim objRecordSet Set objRecordSet =_ objCommand.Execute objRecordSet.MoveFirst Do Until objRecordSet.EOF 'ShowStatusの呼び出し Call ShowStatus(objRecordSet.Fields("distinguishedName").Value, 0) objRecordSet.MoveNext Loop End Function '////////////DN名を利用して情報を取得//////////// Function ShowStatus(DN,cnt) Dim adsUser,adsMember,adsMemberGroup Dim strName Dim i Dim stdout Dim Members Dim ArrMembers Set adsUser = GetObject("LDAP://" & DN ) set stdout = WScript.StdOut For i = 1 to cnt stdout.Write vbTab Next 'ユーザオブジェクトだった場合sAMAccountNameも表示 If adsUser.Class = "user" Then stdout.Write Mid(adsUser.Name,4) &_ "(" & adsUser.sAMAccountName & ")" & vbCrlf Else stdout.Write Mid(adsUser.Name,4) & vbCrlf End If '////////////親グループ以外の場合Function終了//////////// If IsArray(adsUser.MemberOf) Then For Each adsMemberGroup In adsUser.MemberOf Call ShowStatus(adsMemberGroup, cnt +1) Next ElseIf Not adsUser.MemberOf = "" Then Call ShowStatus(adsUser.MemberOf, cnt +1) End If End Function
こんばんは、お役に立てたようで何よりです。
今後とも、よろしくお願いいたします。
すばらしいスクリプトです。元ネタに使用させていただきます!