Active Directoryのユーザーが所属するグループを、自動的にテキスト形式で抽出する方法を教えてください。ユーザー数、OU数共に手作業ではできないほど多いので。よろしくお願いします。バージョンは 5.2.3790.1830です。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/09/07 18:46:53
  • 終了:2007/09/11 10:44:59

ベストアンサー

id:mj99 No.1

mj99回答回数138ベストアンサー獲得回数382007/09/07 21:47:50

ポイント60pt

http://blog.so-net.ne.jp/nakagami/2005-05-23

VBSでテキスト化できそうです。


----

下記のスクリプトを保存して、コマンドラインで

CSCript hoge.vbs > hoge.txt

と、すれば、hoge.txtにユーザと所属するグループの組み合わせがすべて出力されます。


----

スクリプト実行にあたって、ディレクトリ(CN=Users,CN=Builtin、それぞれのOUなど)にアクセスする資格が必要です。

グループのネストには対応していません。


----

以下スクリプト

const dm = "office.domain.co.jp" ' ドメイン名を指定する(コンピュータ名ではない)

main()

Sub main
  Set cn = CreateObject("ADODB.Connection")
  Set rs = CreateObject("ADODB.Recordset")

  cn.Provider = "ADsDSOObject"
  cn.Open "Active Directory Provider"

  strSql = "select name,memberof from 'LDAP://" & dm &"' WHERE objectClass = 'user'"
  rs.Open strSql, cn
  Do Until rs.EOF
    If Not IsNull(rs("memberof")) Then
      For Each gp In rs("memberof").Value
          WScript.Echo rs("name") & "," & GetOneName(cn, gp)
      Next
    Else
      WScript.Echo rs("name") & ",なし"
    End If
    rs.MoveNext
  Loop
End Sub

Function GetOneName(cn, dn)
  Set rs = CreateObject("ADODB.Recordset")
  strSql = "select name from 'LDAP://" & dn & "'"
  rs.Open strSql, cn
  GetOneName = rs(0)
End Function
id:pi12345

思った通りの結果が得られました。ありがとうございます。

2007/09/11 10:44:05

その他の回答(1件)

id:mj99 No.1

mj99回答回数138ベストアンサー獲得回数382007/09/07 21:47:50ここでベストアンサー

ポイント60pt

http://blog.so-net.ne.jp/nakagami/2005-05-23

VBSでテキスト化できそうです。


----

下記のスクリプトを保存して、コマンドラインで

CSCript hoge.vbs > hoge.txt

と、すれば、hoge.txtにユーザと所属するグループの組み合わせがすべて出力されます。


----

スクリプト実行にあたって、ディレクトリ(CN=Users,CN=Builtin、それぞれのOUなど)にアクセスする資格が必要です。

グループのネストには対応していません。


----

以下スクリプト

const dm = "office.domain.co.jp" ' ドメイン名を指定する(コンピュータ名ではない)

main()

Sub main
  Set cn = CreateObject("ADODB.Connection")
  Set rs = CreateObject("ADODB.Recordset")

  cn.Provider = "ADsDSOObject"
  cn.Open "Active Directory Provider"

  strSql = "select name,memberof from 'LDAP://" & dm &"' WHERE objectClass = 'user'"
  rs.Open strSql, cn
  Do Until rs.EOF
    If Not IsNull(rs("memberof")) Then
      For Each gp In rs("memberof").Value
          WScript.Echo rs("name") & "," & GetOneName(cn, gp)
      Next
    Else
      WScript.Echo rs("name") & ",なし"
    End If
    rs.MoveNext
  Loop
End Sub

Function GetOneName(cn, dn)
  Set rs = CreateObject("ADODB.Recordset")
  strSql = "select name from 'LDAP://" & dn & "'"
  rs.Open strSql, cn
  GetOneName = rs(0)
End Function
id:pi12345

思った通りの結果が得られました。ありがとうございます。

2007/09/11 10:44:05
id:hayashi_rice3 No.2

hayashi_rice3回答回数93ベストアンサー獲得回数02007/09/09 21:34:22

id:pi12345

私にはちょっと難解でした。。

2007/09/11 10:44:07

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません