- PR -

AD登録データエクスポート時のコミットについて

投稿者投稿内容
S41
会議室デビュー日: 2008/03/04
投稿数: 8
投稿日時: 2008-03-20 13:19
いつもお世話になっております。

ActiveDirectory情報をVBSにてエクスポートを行なっています。
(主にname,memberof,sAMAccountName,distinguishedName )
複数階構造のユーザー、グループを出力しているのですが新規にグループを
作成したデータがエクスポートデータから漏れてしまいます。
確認している分では一週間以上前の登録データは反映されているようです。

ADのデータベースに登録された情報をコミットする方法等あるのでしょうか?
もしくは作成したVBSに誤りがあるのでしょうか?


以下にソースを転記します。
------------------------------

const dm = " ドメイン名を指定する(コンピュータ名ではない)”

main()

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

cn.Provider = "ADsDSOObject"
cn.Open "Active Directory Provider"
strHeader = "Cn;SamAccountName;Name;DistinguishedName"
strSql = "select name,memberof,sAMAccountName,distinguishedName from 'LDAP://" & dm &"' WHERE objectClass = 'user' or objectClass = 'group'"
rs.Open strSql, cn
WScript.echo strHeader
Do Until rs.EOF
If Not IsNull(rs("memberof")) Then
For Each gp In rs("memberof").Value
WScript.Echo GetOneName(cn, gp) & ";" & rs("sAMAccountName") & ";" & rs("name") & ";" & rs("distinguishedName")
Next
Else
'WScript.Echo "なし;" & rs("sAMAccountName") & ";" & rs("name") & ";" & rs("distinguishedName")
End If
rs.MoveNext
Loop
End Sub
----------------------------------------

不具合内容:新規登録グループが出力対象から外れる。

なおCSVDEで出力した結果を見ると問題なく登録されています。




どうかご教示ねがいます。


[ メッセージ編集済み 編集者: S41 編集日時 2008-03-20 13:22 ]
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2008-03-20 14:01
どこの DC から data とってきているのですかね?

DC を指定して query を投げていないので、DC 間の同期が間に合わない timing で取得しちゃっているんじゃないですか?

FSMO である DC を指定して query 投げたら問題ないんじゃないかな。
_________________
S41
会議室デビュー日: 2008/03/04
投稿数: 8
投稿日時: 2008-03-20 15:08
ちゃっぴさん早速のご返答感謝です。

DC名は指定しているのですがうまくいかないのです。
FSMOであるサーバーを指定(ホスト名)を指定するということなのでしょうか?

'LDAP://" & aaa.bbb.local &" (※aaa.bbbはドメイン名)

この形式では問題あるのでしょうか??
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2008-03-20 20:29
引用:
FSMOであるサーバーを指定(ホスト名)を指定するということなのでしょうか?



そういうことです。
Host を指定しない場合にはどこの Domain Controler を利用されるかわかりませんね。

LDAP ADsPath

上記に書かれているので参考にしてください。
_________________
S41
会議室デビュー日: 2008/03/04
投稿数: 8
投稿日時: 2008-03-21 13:28
ご回答感謝です。

ご指摘の通り

LDAP://host.aaa.bbb (※aaa.bbbはドメイン名)

行なってみたのですが結果は同じでした・・・
自社構築ADの2台それぞれ指定してやってみたのですがダメでした。
なにがおかしいんでしょうね…
ぴよこ
ベテラン
会議室デビュー日: 2006/12/11
投稿数: 61
投稿日時: 2008-03-21 16:18
既定では、Active Directory に対してクエリを実行すると、最初の 1,000 件しか返されません。

とかではないでしょうか?
S41
会議室デビュー日: 2008/03/04
投稿数: 8
投稿日時: 2008-03-21 20:18
ぴよこさん
ご回答ありがとうございます。早速実行してみましたが・・・私のやり方がまずいのか表示はやっぱりされませんでした・・・。下記の記述なにか間違っていますでしょうか?

-------------------------------------------------------

const dm = "******.AAAA.BBBB.local" ' ドメイン名指定
Const ADS_SCOPE_SUBTREE = 2

main()

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

Set objCommand = CreateObject("ADODB.Command")

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

Set objCommand.ActiveConnection = cn
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

strHeader = "Cn;SamAccountName;Name;DistinguishedName"
strSql = "select name,memberof,sAMAccountName,distinguishedName from 'LDAP://" & dm &"' WHERE objectClass = 'user' or objectClass = 'group'"
rs.Open strSql, cn
WScript.echo strHeader
Do Until rs.EOF
If Not IsNull(rs("memberof")) Then
For Each gp In rs("memberof").Value
WScript.Echo GetOneName(cn, gp) & ";" & rs("sAMAccountName") & ";" & rs("name") & ";" & rs("distinguishedName")
Next
Else
'WScript.Echo "なし;" & rs("sAMAccountName") & ";" & rs("name") & ";" & rs("distinguishedName")
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
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2008-03-21 22:10
う〜む。どうやって登録したんでしょうね?

ちなみに DC の Windows の version はなんでしょう?2003 ですか?

_________________

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