- PR -

AD上のグループの白髪アイコンメンバーの取得

1
投稿者投稿内容
IMPREZA
ベテラン
会議室デビュー日: 2005/07/06
投稿数: 58
投稿日時: 2008-05-30 17:38
はじめまして。

今、AD上のセキュリティグループに登録されているメンバーの取得を行おうとしています。
方法はVBSで行いたいと思っています。
現状、1グループに300人程度であれば、全てのユーザ情報を取得してくることが可能です。
しかし、1グループに500人、1000人、1500人といる場合があり、それらのメンバーを取得しようとすると391人まで取得して処理が終了してしまいます。

AD2003の仕様で、1度に取得できる人数みたいなのがあると聞いたことがあります。
.Netでは解決する方法もあると聞いたことがあるのですが、VBSで同様の処理を行うことが可能なのかを知りたいです。

いろいろと探しては見たものの、やっていることは自分のスクリプトと変わらずでした。
一応、やっていることを記載します。

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
Const ADS_SCOPE_SUBTREE = 5
Const PSIZE = 100
i = 0

Set strDomainName = GetObject("LDAP://RootDSE")
ADsPath = strDomainName.Get("defaultNamingContext")

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") = PSIZE
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

SecGroup = inputbox("セキュリティグループ名を入力してください")

objCommand.CommandText = _
 "SELECT distinguishedName FROM 'LDAP://" & ADsPath & "' WHERE objectCategory='group' " & _
 "AND CN='" & SecGroup & "'"

Set objRecordSet = objCommand.Execute

If objRecordset.RecordCount = 1 Then
 objRecordSet.MoveFirst
 Do Until objRecordSet.EOF
  strDN = objRecordSet.Fields("distinguishedName").Value
  objRecordSet.MoveNext
 Loop

 Set objGroup = GetObject("LDAP://" + strDN)
 objGroup.GetInfo
 arrMem = objGroup.GetEx("member")
 For Each MemberName In arrMem
  strMember = Split(MemberName,",")
  strUserName = Split(strMember(0),"=")
  if i = 0 Then
   strUsr = strUserName(1)
  else
   strUsr = strUsr + vbCrLf + strUserName(1)
  end if
  i = i + 1
 Next

 strUsr = strUsr & vbcrlf & "計 " & i & " 名"
 MakeFile = SPath & SecGroup & ".txt"
 Set objWrite = objFS.CreateTextFile(MakeFile,
 objWrite.WriteLine strUsr
 objWrite.Close
Else
 Msgbox "指定したグループ名が見つかりません。"
End if


ADはWindows 2003 Server
スクリプトはWindows XP SP2 or SP3で実行しています。
1

スキルアップ/キャリアアップ(JOB@IT)