- - PR -
ActiveDirectory に CSVファイルからグループ登録をするスクリプト作成
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-06-19 22:05
問題を切り分けるために、先のスクリプトの strFilter を以下のようにして
<テスト3>のCSVファイルを投入すると、登録されないことを確認しました。 strFilter = "(&(objectClass=group)(gidNumber="& strgidNumber &"))" また、gidNumber のみ異なり、それ以外の値は既に登録されているCSVファイル ■例 testgroup04,テストグループ04,testgroup04,ad01,2007 testgroup05,テストグループ05,testgroup05,ad01,2008 testgroup06,テストグループ06,testgroup06,ad01,2009 を投入した場合は、以下のメッセージが表示され、 グループは登録されませんでした。 --- 以下 --- (null): オブジェクトは既に存在します。 --- 以上 --- ただし、msSFU30Name が既登録のCSVファイルはグループ登録できてしまいます。 そこで、 strFilter = "(&(gidNumber="& strgidNumber &")(msSFU30Name="& strmsSFU30Name &"))" や strFilter = "(&(objectClass=group)(gidNumber="& strgidNumber &")(msSFU30Name="& strmsSFU30Name &"))" といったものを試しましたが、上記同様、msSFU30Name が既登録のCSVファイルはグループ登録できてしまいます。 LDAPフィルタの書き方が間違っているのでしょうか? 貴重なお時間を頂き申し訳ありませんが、 宜しくお願い致します。 | ||||
|
投稿日時: 2007-06-20 00:13
ちょっとばかしキツイこと書くようですが。
debug ってやったことありませんか? 今回の場合、とりあえず登録自体の制御は行わずに LDAP query だけを投げてみれば、結果が返ってくるかで判断は可能ですよね? で、そこが OK なら次に疑うべきは条件分岐。 そんな感じで、一つ一つ問題をつぶしてゆけば最後には問題ないものとなるでしょう。 _________________ | ||||
|
投稿日時: 2007-06-20 01:47
ちゃっぴ様
ご返答ありがとうございます。 本格的なデバッグはやったことがありませんが、 今回のような bash のスクリプトなどで 標準出力に表示させたり、 ファイルに出力した結果から問題箇所を見つけ対応したことはあります。 今夏の場合、私自身のWindows経験の未熟さから 1.VBScript がほとんど理解できていない。 2.ActiveDirectoru の LDAPフィルタの書式がわかっていない。 3.Web上で検索をおこなって情報ソースを探しているが、 私が理解できるような情報ソースが分かっていない などがあり、皆様のお力をお借りしている状況です。 ご指摘頂いていることは十分承知しております。 その上で何かご助力頂ければ幸いです。 宜しくお願い致します。 | ||||
|
投稿日時: 2007-06-20 13:03
いろいろ試してるみたいですが、
まずは、テスト1のケースについて調査したいので、 フィルタを私が掲示した物に設定した状態で、 「WScript.Echo(strsAMAccountName & " は既に該当グループがあります。") 」 の直前行に、以下のコードを入れてみてください。 フィルタにかかったオブジェクトを表示します。
[ メッセージ編集済み 編集者: ぴよこ 編集日時 2007-06-20 13:05 ] | ||||
|
投稿日時: 2007-06-20 15:27
ぴよこ様
ご返答頂きありがとうございます。 ご提示頂いたコードを追記した後実行した結果を以下に記します。<テスト1A> 結果から申し上げますと、 問題点が分かり、期待通りの結果を得ることができました。 デバッグ用に頂いたコードから、 testgroup04 グループを追加する際に、 既に登録されている testgroup01 と フィルタにでていました。 そこで、adsi エディットで確認したところ、 確かに msSFU30Name が testgroup04 となっていました。 ※testgroup05 もエラー表示内容通りになっていました。 本来ならば、本文下部にあるCSVファイルが登録されていたはずなのですが、 私の方で本件に関していろいろ試しているうちに変えてしまったのだと思います。 原因の切り分けにご助力頂きありがとうございました。 また、私の安易なミスで貴重なお時間を頂いてしまったことをお詫び致します。 そこで、上記を踏まえ、正しい登録済みグループに変更し、 改めて<テスト1>から<テスト3>を行いましたところ、 期待通りの結果を得ることができました。 また、<テスト4>として、samaccountname のみが既登録のCSVファイルを作成し、 実行したところ、期待通り、全てグループ登録されませんでした。 さらに、<テスト7>のようなCSVファイルにて確認を行ったところ、 testgroup12 のみ登録されることを確認しました。 これにより、 「sAMAccountName、msSFU30Nam、GidNumber のうち何れか1つでもマッチすれば グループを作成しない。」 を実現することができました。 これも、ぴよこ様・チャブーン様・ちゃっぴ様のご助力のお陰です。 特にぴよこ様には、再三に渡るご助言・具体的なご提示を頂き、大変感謝しております。 本当にありがとうございました。 次はこれを元に、同様な方法でユーザ登録を行うスクリプトを作成したいと思っております。 最後にもう一つだけ伺わせてください。 今回のスクリプトを作成するに置いて、 ADのLDAPフィルタに関する内容が理解できておりません。 ※ご説明頂いた部分は除きます。 そこで、私のような Windows 管理初心者でも ADのLDAPフィルタを理解できるような 情報元をご存知でしたら教えて頂けないでしょうか。 宜しくお願い致します。 <テスト1A> ========================================================================================== ■CSVファイル testgroup04,テストグループ04,testgroup04,its,2004 testgroup05,テストグループ05,testgroup05,its,2005 testgroup06,テストグループ06,testgroup06,its,2006 ※全項目とも存在しないCSVファイル ■msgBox結果 (&(objectClass=group)(|(samAccountName= testgroup04)(msSFU30Name= testgroup04)(GidNumber=2004))) 上記ウインドウ表示以後、以下表示 ------------------------------------------------------------ 以下の情報がフィルタにかかりました。objRecordSet.EOF=False samaccountname=testgroup01 msSFU30Name=testgroup04 gidNumber=2001 distinguishedname=CN=testgroup01,OU=test,DC=ad01,DC=local -------------------------------------------------------------- (&(objectClass=group)((|(samAccountName= testgroup05)(msSFU30Name= testgroup05)(GidNumber=2005))) 上記ウインドウ表示以後、以下表示 ------------------------------------------------------------ 以下の情報がフィルタにかかりました。objRecordSet.EOF=False samaccountname=testgroup02 msSFU30Name=testgroup05 gidNumber=2002 distinguishedname=CN=testgroup02,OU=test,DC=ad01,DC=local -------------------------------------------------------------- (&(objectClass=group)((|(samAccountName= testgroup06)(msSFU30Name= testgroup06)(GidNumber=2006))) 上記ウインドウ表示以後、ウインドウ表示なし ■実行結果 ○testgroup06 のみグループ登録。後は登録されず。 ○testgroup06 の msSFU30Name、GidNumber は問題なし。 上記以外はグループに追加されていないため確認できず。 → 異常。本来ならば、全グループ登録されなければならない。 ■補足 ご提示頂いたスクリプトを追加した際にウインドウに表示された内容ですが、 既に以下のグループが登録されている状態で実行しています。 testgroup01,テストグループ01,testgroup01,its,2001 testgroup02,テストグループ02,testgroup02,its,2002 testgroup03,テストグループ03,testgroup03,its,2003 <テスト4> ========================================================================================== ■CSVファイル testgroup01,テストグループ07,testgroup07,its,2007 testgroup02,テストグループ08,testgroup08,its,2008 testgroup03,テストグループ09,testgroup09,its,2009 <テスト7> ========================================================================================== ■CSVファイル testgroup10,テストグループ10,testgroup10,its,2007 testgroup11,テストグループ01,testgroup07,its,2011 testgroup12,テストグループ07,testgroup12,its,2012 testgroup07,テストグループ13,testgroup13,its,2013 | ||||
|
投稿日時: 2007-06-21 01:53
地道に RFC 2254 読んでくださいとしか。 The String Representation of LDAP Search Filters 難解ですけど。 _________________ | ||||
|
投稿日時: 2007-06-21 02:02
チャブーンです。
初心者で使うようなサイト、というのはわかりませんが、ちょっと探したら、こういうサイトはありますね。 http://www.rlmueller.net/ADOSearchTips.htm 内容もわりと基本からまとまってますし、MSMVP な人のページなんで、悪くないんじゃないですかね。 | ||||
|
投稿日時: 2007-06-21 02:26
知らないうちに RFC 4515 に置き換わっていた。。。
_________________ ちゃっぴ@わんくま同盟 ちゃっぴの監禁部屋 [ メッセージ編集済み 編集者: ちゃっぴ 編集日時 2007-06-21 02:26 ] |