Active Directoryのユーザの所属するグループをツリー構造で表示させる@VBScript
![]()
前回作ったグループのツリー表示と逆で、今度はユーザに紐付くグループの一覧を表示できるようにしてみました。普通に一覧表示すると所属している最初のグループしか表示出来ないんだけど、このスクリプトを使えばActive Directory上の所属しているすべてのグループを一覧出来ます。
※ただしDomain Usersは表示されません。
また、以下の部分は環境に応じて変更してください。
DomainName = "dc=pnpk,dc=local"
Option ExplicitConst 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 IfSQL = "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 =_
objConnectionobjCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") =_
ADS_SCOPE_SUBTREEobjCommand.CommandText = SQL
Dim objRecordSet
Set objRecordSet =_
objCommand.ExecuteobjRecordSet.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 ArrMembersSet adsUser = GetObject("LDAP://" & DN )
set stdout = WScript.StdOutFor 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
Popularity: 4%
トラックバック URI : http://pnpk.net/cms/archives/439/trackback/
【関連記事】