2008/7/8 火曜日

Active Directoryのユーザの所属するグループをツリー構造で表示させる@VBScript

Filed under: Windows Server 2003, スクリプト — pnpk @ 0:25:45

001.png
前回作ったグループのツリー表示と逆で、今度はユーザに紐付くグループの一覧を表示できるようにしてみました。普通に一覧表示すると所属している最初のグループしか表示出来ないんだけど、このスクリプトを使えば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

Popularity: 4%

コメント (0) »

この記事にはまだコメントがついていません。

コメント RSS トラックバック URI

コメントをどうぞ

HTML convert time: 0.517 sec. Powered by WordPress ME