【IDM】MSMQ を使って確実なユーザー登録を行う その9 ~ スクリプトをルールに登録する

今年の営業日も残り少なくなってきました。私がいるオフィスも、心なしか人が少ないような…いや確実に少ない。みなさん、年末年始は休めそうですか?私は…うーん…びみょーです。 #これまでの投稿一覧は、この投稿の最下段に掲載してあります。 ということで、今回は、その7 で完成させたスクリプトをルールに登録しましょう。 MSMQのインストールと環境設定がまだという方は、その2、その3 をご覧ください。 以下のような構成になっていればOKです。[Inputキュー] と [Errorキュー] が作成してあり、トリガーは [Inputキュー] のみに関連付けられています。   スクリプトをルールに登録するには、規則のプロパティから [規則の操作] タブを開きます。今回は、事前に rule1 という規則が作成してありますので、こいつのプロパティを開きます。 [規則の操作] タブの中にある [スタンドアロンの実行可能ファイル(EXE)を起動する] をチェックし、実行可能ファイルのパスとして、VBSファイルのホストプログラムである CScript.exe をフルパスで指定します。 C:\Windows\System32\cscript.exe 次に、[パラメータ] ボタンをクリックし、起動パラメータを指定します。 既に何らかのパラメータが指定されている場合には、すべて削除してしまってください。今回は使いません。ここでは、CScript.exe のパラメータとして、作成したVBSファイルを指定します。 このとき、パラメータの種類として、「文字列リテラル」を選択し、VBSファイルのフルパスを「リテラル値」に記載します。今回は、作成したスクリプトをReceiveInputQueue.vbs という名前で保存してあります。 以下の図を参考にしてください。 これで、ルールの設定は完了です。 以降、新しいメッセージがInputキューに入ってくるたびに、ここで指定したルールが起動されます。 そして、ADへのユーザー登録に問題が発生すれば、メッセージは Errorキュー に移動されます。 次回は、Errorキュー に移動されたメッセージを定期的に Inputキューに戻す処理について考察してみます。 — これまでの投稿は以下の通りです。 【IDM】MSMQ を使って確実なユーザー登録を行う その1 ~ MSMQ って何してくれるの? 【IDM】MSMQ を使って確実なユーザー登録を行う その2 ~ MSMQ のインストール(Windows Server…


【IDM】MSMQ を使って確実なユーザー登録を行う その8 ~ MSMQトリガーのクセを理解する

さてもう一息ですね。第8回です。 #これまでの投稿一覧はこの投稿の最下段に書いておきます。 前回作成したスクリプトをキューのルールとして登録する前に、MSMQ運用に必要な知識について書いておきます。知識というよりも、クセですね。 具体的には、何らかの原因によってスタックしてしまったメッセージを処理する方法です。これを知らないと、MSMQトリガーの運用は、結構困ります。 —– MSMQトリガーに何らかの問題が発生したためルールが実行されなかったとします。 この場合、メッセージはスクリプトによって処理されず、いつまでも以下のような状態でキューに残ってしまう可能性があります。 例えば、スクリプトに不備があり、メッセージの送信が正常に行われなかった、などといったことが考えられます。 赤でくくった部分に注目してください。testuser001 ~ testuser020 までのユーザーが Inputキューに登録されていることがわかります。 この状態で、MSMQが正常に戻った、もしくはスクリプトの不備修正が完了したとします。つまり、トリガーが正常に動作する状態になったと仮定します。 ここに新たなメッセージが5件(testuser021 – 025)入ってきました。さて、どうなるでしょう??? Receive の処理を理解していればわかりますよね。以下のように、古いものから処理され、後から入ってきたキューは後回しにされます。 このことから、「新しいメッセージが入ってこない限りトリガーが起動しない」ということが容易に想像できます。 #古いメッセージから処理するかどうかは、環境設定およびスクリプトの作り方次第です。 #今回はReceiveを使用したので古いものから順番に処理されています。 これでは困るのでなんとかしたい。そんなときは、サービス一覧にある Message Queue Triggers サービスを再起動すれば、最も古いメッセージから順番にルールが実行されます。 ここで覚えておいていただきたいのは、Message Queue Triggers サービスは Message Queue サービスとは分離されているので、停止してもメッセージが一時的に受け取れなくなるといった弊害は発生しません。 これを知っていると、例えば、「実際の登録は明日の午前0時に開始したい」なんてことが実現できます。つまり、事前に Message Queue Triggers サービス停止した状態でメッセージを登録しておき、午前0時に起動してあげればよいわけです。 もう一つ、スタックしたメッセージを処理する方法として、スクリプトを手動で実行するという手も考えられます。 まとめると、以下の通りです。 スタックしたメッセージを処理するには、 新しいメッセージを登録してトリガーを起動する Message Queue Triggers サービスを再起動する メッセージを処理するスクリプトを手動で実行する のいずれかを実行する必要があります。 是非とも覚えておいてください。 —- これまでの投稿は以下の通りです。 【IDM】MSMQ を使って確実なユーザー登録を行う その1…


【IDM】MSMQ を使って確実なユーザー登録を行う その7 ~ キューを移動する

明日23日が休みだってことに、いま気付きました。 MSMQでユーザー登録シリーズです。で、すいません。最終回じゃないです。 【IDM】MSMQ を使って確実なユーザー登録を行う その1 ~ MSMQ って何してくれるの? 【IDM】MSMQ を使って確実なユーザー登録を行う その2 ~ MSMQ のインストール(Windows Server 2008) 【IDM】MSMQ を使って確実なユーザー登録を行う その3 ~ MSMQ の環境設定 【IDM】MSMQ を使って確実なユーザー登録を行う その4 ~ メッセージの送信 【IDM】MSMQ を使って確実なユーザー登録を行う その5 ~ メッセージの中身を読み取る 【IDM】MSMQ を使って確実なユーザー登録を行う その6 ~ ADにユーザーを登録する 今回はエラーとなったメッセージをErrorキューに移動します。 これは非常に簡単です。 単に、Send で Errorキューに送るだけです。InputにSendしたときとまったく同じですね。 以下の赤く示した部分が、前回から追記したコードで、メッセージをSendしているのが94行目です。今回は、特に難しいところは無いはずです。 アレンジするとすれば、キューの移動部分でしょうか。今回は、エラーが発生したメッセージを一律 再実行を想定して Errorキュー に移動していますが、エラーの種類によってキューを分けるのも良いかもしれません。 たとえば、「登録に失敗したユーザーについては即効で対応する必要がある」ということで、登録失敗専用のキューを作成しておき、キューにメッセージが投稿されたらその都度メールを送信するなどといった処理が考えられます。 ということで、ひとまず、AD登録用スクリプトについては、これで完成です。 01 02 03 04 05 06…

2

【IDM】MSMQ を使って確実なユーザー登録を行う その6 ~ ADにユーザーを登録する

MSMQでユーザーを登録するシリーズです。もうすこしで完結します。 【IDM】MSMQ を使って確実なユーザー登録を行う その1 ~ MSMQ って何してくれるの? 【IDM】MSMQ を使って確実なユーザー登録を行う その2 ~ MSMQ のインストール(Windows Server 2008) 【IDM】MSMQ を使って確実なユーザー登録を行う その3 ~ MSMQ の環境設定 【IDM】MSMQ を使って確実なユーザー登録を行う その4 ~ メッセージの送信 【IDM】MSMQ を使って確実なユーザー登録を行う その5 ~ メッセージの中身を読み取る 前回はキューに蓄積されたメッセージを受信する方法について解説しました。 今回は、受信した情報をActive Directoryに登録します。 「ADに登録するスクリプトなんて、いまさら解説されても…」という方、いらっしゃいますよね。まぁ、そうおっしゃらずに、ちょっとご覧ください。 まずは、スクリプトの全体像から。長くてすいません。 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19…

1

【IDM】MSMQ を使って確実なユーザー登録を行う その4 ~ メッセージの送信

MSMQを使用してユーザー登録を工夫しようシリーズの第4回目です。 前回の登録から..なんと半年…Tech・Ed 2008 では「続き待ってます」と言われておりました…すみませんです。他にも書きかけの記事があったりもして…えーと、えーと、干支が変わる前になんとかしたいかなぁと思う今日この頃です(あ、なんか今日 冴えてるかも!)。 前回までの記事は以下の通りです。 【IDM】MSMQ を使って確実なユーザー登録を行う その1 ~ MSMQ って何してくれるの? 【IDM】MSMQ を使って確実なユーザー登録を行う その2 ~ MSMQ のインストール(Windows Server 2008) 【IDM】MSMQ を使って確実なユーザー登録を行う その3 ~ MSMQ の環境設定 今回は、VBScript(PowerShellじゃないところがニクいじゃぁありませんか)を使用してMSMQでメッセージを送信してみます。 ■メッセージを送信してジョブを作成する 第3回の後半で使用したスクリプトを見てみましょう。拡張子はvbsです。 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Const MQ_RECEIVE_ACCESS …

6

【IDM】MSMQ を使って確実なユーザー登録を行う その3 ~ MSMQ の環境設定

もう金曜の夜か。一週間が速すぎます。 「MSMQ を使って確実なユーザー登録を行う」シリーズの3回目です。 【IDM】MSMQ を使って確実なユーザー登録を行う その1 ~ MSMQ って何してくれるの? 【IDM】MSMQ を使って確実なユーザー登録を行う その2 ~ MSMQ のインストール(Windows Server 2008) 今回は、MSMQ上にテスト的なキューを作成してみましょう。 その前に、簡単に MSMQの動きについてお話ししておきます。ただし、今回の目的達成のために必要最小限のお話しかしません(できないというはなしも…)。もっと詳しく知りたい!という方は、MSDNサイトをご覧ください。 What’s new in Message Queueing 4.0(ごめんなさい、英語です)http://msdn.microsoft.com/en-us/library/ms701784(VS.85).aspx  Windows Server 2008 テクニカルライブラリ メッセージキューサービス(ごめんなさい英語です、が、機械翻訳もつきます)http://www.microsoft.com/japan/technet/windowsserver/2008/library/0a1551a3-f169-4aaa-b486-e8c66f1a3d91.mspx Message Queueing COM Components (英語、Windows Script からアクセスする際には必見)http://msdn.microsoft.com/en-us/library/ms704064(VS.85).aspx Microsoft Message Queueing(日本語)(2008/Vistaの最新情報は含まれていません)http://msdn.microsoft.com/ja-jp/library/bb970313.aspx メッセージキュー SDKドキュメント(日本語)(2008/Vistaの最新情報は含まれていません)http://msdn.microsoft.com/ja-jp/library/cc448132.aspx    では、以下の図をご覧ください。 クリックで拡大 アプリケーションから投入されたメッセージは、MSMQ上に作成したキューに一旦格納されます。 キューにメッセージが格納されたタイミングで自動的にプログラムを実行させるには、キューを監視するプログラムを常駐させておくことも可能ですが、IT pro 的には「トリガー」を作成しておくと便利でしょう。トリガーには、メッセージを振り分けるための「条件」と、振り分けられたメッセージに対する処理である「操作」を指定することができます。 キューには 複数のトリガー を割り当てることもできますし、一つのトリガーに 複数のルール、1つのルールに 複数の条件+操作…

7

【IDM】MSMQ を使って確実なユーザー登録を行う その2 ~ MSMQ のインストール(Windows Server 2008)

あぁ、タスポどうしよう…。 「MSMQ を使って確実なユーザー登録を行う」シリーズの 2回目です。 【IDM】MSMQ を使って確実なユーザー登録を行う その1 ~ MSMQ って何してくれるの? 今回は、普段あまりなじみのない MSMQ をインストールしましょう。プラットフォームは Windows Server 2008 を使用します。 Windows Server 2008 では MSMQ についてもエンハンスが行われています。Windows Server 2008(および Vista) では、Message Queueing 4.0 と呼ばれており、以下のような機能強化がなされています。 物理キューにサブキューを生成することで、1つの物理キューの中でメッセージをグルーピングできる 参考  Creating Sub Queue http://msdn.microsoft.com/en-us/library/ms701277(VS.85).aspx メッセージキューの管理コンソールを使用してメッセージを移動 クリックで拡大 アプリケーションごとに固有の配信不能キューを使用できる 参考 Handling Poison Messages http://msdn.microsoft.com/en-us/library/ms703179(VS.85).aspx メッセージのトランザクションをリモートから受信できる クリックで拡大 規定の暗号化形式がRC4になったほか、高度暗号化標準(AES)もサポート など 詳しくは、お手元の2008のヘルプか、以下のサイトをご覧ください。 What’s new in Message Queueing 4.0(ごめんなさい、英語です)http://msdn.microsoft.com/en-us/library/ms701784(VS.85).aspx  Windows…

8

【IDM】MSMQ を使って確実なユーザー登録を行う その1 ~ MSMQ って何してくれるの?

こうも天気がよいと、なんだかどうでもよくなりますね。メタボドンと来い!ってかんじです。 さて、現在募集中の TechEd ライトニングトーク 登壇者に向けたサンプルスライドを作ってみたわけですが、せっかくなので少し詳細に解説したいと思います。 【TechEd】ライトニングトーク サンプル ~ MSMQ を使用した確実なユーザー登録 ~ MSMQ って、そもそもご存知でしょうか?意識してインストールしないと「コンピュータの管理」にも出てこないので、「始めて聞いた」という方もいらっしゃるかもしれません。 Microsoft Message Queueing(Microsoft Message Queue Service てのは古い言い方だったようです。失礼しまし) の略で、分散メッセージングアプリケーションを開発するための基盤となるサービスです…と書くと、なんか IT Pro とは無縁のもののように思えてきますが、これがまた使ってみるとやめられなくなるくらい面白いです。Developer だけに触らせていたのではもったいないので、IT Pro も使いましょう! で、ここでいう「メッセージ」という言葉ですが、これはメールのようなものだと思ってください。次々と送られてくるメッセージをうまく捌くためのエンジンが MSMQ です。 では、MSMQ がなんでユーザー登録にとって便利なのかということですが。 ユーザー登録は、基本的にシーケンシャルな処理です。おそらく、スクリプトには以下のようなコードを書くことになるでしょう。 ユーザー一覧が書かれたCSVファイルを開く CSVファイルを1行よみとる ユーザーIDをキーにしてActive Directory 上にユーザーを作成 作成できたら氏名やホームディレクトリ等をセット 登録結果の確認処理後、ログを吐き出し 2.に戻って繰り返し 例えば10000人のユーザーを登録する場合、すべての処理をひとまずやってしまってから、ログから正常に終了したかどうかを確認する必要があります。処理に慣れている方であれば、「失敗したユーザー一覧」を別に吐き出して、それをベースに再登録を行ったりなんてことも考えるのではないでしょうか。 処理が失敗する原因はいくつか考えられます。 ネットワーク障害 ドメインコントローラ側の障害 登録データの不備 コードの不備(想定外の入力データ等) いずれにしても重要なのは、失敗した後のことがきちんと想定されているかどうかということです。 そのためにも、ILM などのパッケージを導入するのがお勧めなわけですが、そうは言ってもお金がかかる世界ですから内々でなんとかできるものならなんとかしたい。。と思うのが人情ってものです。 そこで、OS標準機能である MSMQ を使ってしまい、エラー処理に関するコーディングを簡略化してしまおうと。 以下の図をご覧ください。 クリックで拡大 この図の上に書かれた流れが、いまお話した普通の方法です。…

10