• 【Management】DPM 2007 での Windows Server 2008 システム状態(System State) のバックアップ について

    以前、以下の記事で DPM 2007 のエンハンス予定についてお知らせしました。

    【Management】Data Protection Manager 2007 Rollup & Service Pack 1 について

    この記事で説明されているロールアップは以下に該当します。

    データ マネージャ 2007 保護ホットフィックス パッケージ 2 ロールアップの説明(機械翻訳)
    http://support.microsoft.com/kb/950082/ja

    本日、ネット配信用のコンテンツ(WebCast)を収録するためにDPM2007に上記ロールアップを適用し、Winodws Server 2008 にも問題なくエージェントプログラムを送り込めることを確認したのですが、保護グループ作成時に「システム状態」が指定できないことに気付きました。

    クリックで拡大

    どうしたもんかと調べてみたところ、ひとまず Newsgroup に以下の記事があることに気付きました。

    http://www.microsoft.com/communities/newsgroups/list/en-us/default.aspx?dg=microsoft.public.dataprotectionmanager&tid=84c82bf8-9d3d-4c36-9c26-7c61fc2036fa&mid=84c82bf8-9d3d-4c36-9c26-7c61fc2036fa&cat=&lang=&cr=&sloc=&p=1 

    現在テスト段階であり、もう少しで提供される予定だとのこと。

    もし、現時点で本現象にお気づきの方は、もうすこしお待ちください。

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

    もう金曜の夜か。一週間が速すぎます。

    「MSMQ を使って確実なユーザー登録を行う」シリーズの3回目です。

    今回は、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つのルールに 複数の条件+操作 を割り当てることも可能です。

    キューに格納されたメッセージは、はじめにルールに定義された条件に合致するかどうかがチェックされます。条件はメッセージの送信元やラベル、本文等を使用して定義することができ、それぞれのルールには1つの「操作」、つまりプログラムを指定することができます。

    では、実際にMSMQにキュー、トリガー、ルールを作成してみます。

    キューの作成

    Windows Server 2008 の場合、MSMQをインストールするとサーバーマネージャ の「機能」に「メッセージキュー」ノードが表示されます。

    メッセージキュー ノードを展開し、「専用キュー」を右クリックして[新規作成] - [専用キュー] を選択してください。

    クリックして拡大

    「新しい専用キュー」ウィンドウが表示されるので、キューの名前を入力してください。ここでは、「Input」としました。キューに対する処理はトランザクションを使用することも可能ですが、ひとまず今回はチェックせずに進みます。

    クリックして拡大

    これでキューの作成は完了です。専用キュー配下に、Inputキューが作成されていることを確認してください。

    クリックして拡大

    ルールを作成する

    ルールを作成するにあたり、ルールに���致したメッセージを受信したときに実行するプログラムを作っておきます。といっても、たいそうなものである必要はありません。以下のようなコマンドを実行するバッチファイルで十分です。以下では、バッチファイルに渡された6つの引数を、c:\tmp\msmqtest.log というログファイルに保存しています。バッチファイル名を Input.bat として保存することにします。

    echo %1 %2 %3 %4 %5 %6 >>c:\tmp\msmqtest.log

    次にルール(規則)を作成します。メッセージキュー ノードの「トリガー」を展開し、「規則」を右クリックして表示されるコンテキストメニューから[新規作成] - [規則] をクリックしてください。

    クリックして拡大

     まずは規則名を入力します。ここでは、「rule1」としました。

    クリックして拡大

    次に規則の条件を指定します。ここで指定した条件に合致したメッセージのみが、この後の「操作」の対象となります。

    今回は、以下のように設定してみます。

      • 条件 = メッセージラベルは次の値を含む
      • フィルタの値または文字列 = IDM

    クリックして拡大

     次に、メッセージが条件に一致した場合の操作を指定します。操作には、COMコンポーネントを指定する方法と実行可能ファイルを指定する方法が用意されています。今回は、「スタンドアロン実行可能ファイルの起動」を選択し、実行可能ファイルのパスとして、先ほど作成したバッチファイル( input.bat )を指定します。以下の例では、c:\tmp\input.bat を指定しました。

    バッチファイルを指定したら、[パラメータ] をクリックしてください。

    クリックして拡大

    パラメータの指定画面では、メッセージのさまざまな属性を、バッチファイルの引数として指定することができます。今回、バッチファイルでは %1 から %6 までの 6 つの引数を受け取れるようにしたので、この画面でも 6 つのパラメータを指定することにします。以下のように指定してみてください(ひとまず、適当で結構ですし、6 つに足りなくても大丈夫です)。

    クリックして拡大

    以上でルールの作成は完了しました。

    クリックして拡大

    トリガーの作成

     最後にトリガーを作成します。

     先ほど作成した Input キューを展開し、[トリガー] を右クリックして表示されるコンテキストメニューから [新規作成] - [トリガ] をクリックしてください。

    クリックして拡大

     新しいトリガ画面が起動したら、トリガ名を指定し、「シリアル化」をチェックしてください。「シリアル化」とは、メッセージが入力された順番に処理することです。この場合、1つのメッセージの処理に時間がかかっていても次のメッセージを非同期に実行せず、処理完了まで待つことになります。シリアル化するかどうかは処理内容による判断が必要ですが、ID管理の場合、シーケンシャルでないと不都合が出ることが考えられるため、シリアル化をチェックしておきます。

    また、以下の画面では「メッセージの処理の種類」として「ピーク」が選択されていることがわかります。「ピーク(PEEK)」とは単語の意味のとおり、「覗き見る」ことです。メッセージを受信したら中身の確認だけを行って、メッセージはそのままにしておきます。「取得(レシーブ)」してしまうと、フィルタチェック後にメッセージは削除されてしまうことに注意してください。処理が正常に完了せずに削除されてしまうと、もうやり直しがきかなくなってしまいます。

    トリガの処理を詳しく知るには、以下のサイトをごらんください。日本語で平易に説明されています。 

    着信メッセージの読み取り
    http://msdn.microsoft.com/ja-jp/library/cc446859.aspx 

     シリアル化トリガと非シリアル化トリガ
    http://msdn.microsoft.com/ja-jp/library/cc446863.aspx

    クリックして拡大

     次に、トリガに関連付ける ルール(規則)を選択します。先ほど作成した rule1 を 「適用される規則」に移動してください。複数のルールを適用することも可能です。

    クリックして拡大

    以上でトリガの設定は完了です。

    ためしに、以下のスクリプトを拡張子 vbs で保存してローカルコンピュータ上から実行してみてください。

    ※ junichia03 はコンピュータ名ですので、みなさんのコンピュータ名に置き換えてください

    Const MQ_RECEIVE_ACCESS  = 1 
    Const MQ_SEND_ACCESS     = 2 
    Const MQ_PEEK_ACCESS     = 32 
    Const MQ_ADMIN_ACCESS    = 128
    Const MQ_DENY_NONE           = 0 
    Const MQ_DENY_RECEIVE_SHARE  = 1 

    set objQueueInfo = CreateObject("MSMQ.MSMQQueueInfo")
    set objMsgQueue = CreateObject("MSMQ.MSMQQueue")
    set objMessage = CreateObject("MSMQ.MSMQMessage")

    objQueueInfo.PathName = "junichia03\private$\Input"

    'objQueueInfo.Formatname = "DIRECT=OS:junichia03\private$\Input"
    'objQueueInfo.Formatname = "DIRECT=HTTP://junichia03/msmq/private$\Input"

    set objDist = objQueueInfo.Open(MQ_SEND_ACCESS ,MQ_DENY_NONE)

    objMessage.Label = "msg" & date & time
    objMessage.Body = "メッセージボディ"
    objMessage.Delivery = 1
    objMessage.Send(objDist)

    objDist.Close

    スクリプトの実行後、キューメッセージをリフレッシュすると、送信されたメッセージが登録されているはずです。

    クリックして拡大

    次回は、スクリプトを使用してもう少しテストをしてみましょう。

     

  • 【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つの物理キューの中でメッセージをグルーピングできる
    • メッセージキューの管理コンソールを使用してメッセージを移動
      • クリックで拡大
    • アプリケーションごとに固有の配信不能キューを使用できる
    • メッセージのトランザクションをリモートから受信できる
      • クリックで拡大
    • 規定の暗号化形式がRC4になったほか、高度暗号化標準(AES)もサポート など

    詳しくは、お手元の2008のヘルプか、以下のサイトをご覧ください。

    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

    余談が長くなってしまいました。

    さっそく、Windows Server 2008 に MSMQ をインストールしましょう。インストールは簡単です。おなじみの サーバーマネージャを使用します。

    [サーバーマネージャ] - [ 機能] を右クリックして コンテキストメニューから [機能の追加] をクリックします。

     

     機能追加ウィザードを起動するので、機能一覧から以下の3つの機能を選択して[次へ]進みます。

    • メッセージキューサーバー
    • メッセージ キュー トリガー
    • HTTP サポート

    クリックして拡大

    HTTPサポートは直接ユーザー管理とは関係ないのですが、HTTPを経由してメッセージを受け取ったり、メッセージの中身を確認することができるので入れておくと便利です。

    完了したら再起動を行って、インストール完了です。

    次回は、簡単な動作確認を行ってみます。

     

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

    こうも天気がよいと、なんだかどうでもよくなりますね。メタボドンと来い!ってかんじです。

    さて、現在募集中の TechEd ライトニングトーク 登壇者に向けたサンプルスライドを作ってみたわけですが、せっかくなので少し詳細に解説したいと思います。

    【TechEd】ライトニングトーク サンプル ~ MSMQ を使用した確実なユーザー登録 ~

    MSMQ って、そもそもご存知でしょうか?意識してインストールしないと「コンピュータの管理」にも出てこないので、「始めて聞いた」という方もいらっしゃるかもしれません。

    Microsoft Message Queueing(Microsoft Message Queue Service てのは古い言い方だったようです。失礼しまし) の略で、分散メッセージングアプリケーションを開発するための基盤となるサービスです...と書くと、なんか IT Pro とは無縁のもののように思えてきますが、これがまた使ってみるとやめられなくなるくらい面白いです。Developer だけに触らせていたのではもったいないので、IT Pro も使いましょう!

    で、ここでいう「メッセージ」という言葉ですが、これはメールのようなものだと思ってください。次々と送られてくるメッセージをうまく捌くためのエンジンが MSMQ です。

    では、MSMQ がなんでユーザー登録にとって便利なのかということですが。

    ユーザー登録は、基本的にシーケンシャルな処理です。おそらく、スクリプトには以下のようなコードを書くことになるでしょう。

    1. ユーザー一覧が書かれたCSVファイルを開く
    2. CSVファイルを1行よみとる
    3. ユーザーIDをキーにしてActive Directory 上にユーザーを作成
    4. 作成できたら氏名やホームディレクトリ等をセット
    5. 登録結果の確認処理後、ログを吐き出し
    6. 2.に戻って繰り返し

    例えば10000人のユーザーを登録する場合、すべての処理をひとまずやってしまってから、ログから正常に終了したかどうかを確認する必要があります。処理に慣れている方であれば、「失敗したユーザー一覧」を別に吐き出して、それをベースに再登録を行ったりなんてことも考えるのではないでしょうか。

    処理が失敗する原因はいくつか考えられます。

    • ネットワーク障害
    • ドメインコントローラ側の障害
    • 登録データの不備
    • コードの不備(想定外の入力データ等)

    いずれにしても重要なのは、失敗した後のことがきちんと想定されているかどうかということです。

    そのためにも、ILM などのパッケージを導入するのがお勧めなわけですが、そうは言ってもお金がかかる世界ですから内々でなんとかできるものならなんとかしたい。。と思うのが人情ってものです。

    そこで、OS標準機能である MSMQ を使ってしまい、エラー処理に関するコーディングを簡略化してしまおうと。

    以下の図をご覧ください。

    クリックで拡大

    この図の上に書かれた流れが、いまお話した普通の方法です。

    下に書かれているのがMSMQを使用した方法です。

    「普通の方法」の場合、エラー処理はバッチ処理全体として考慮する必要があるため、制御が面倒になります。コードも増えますので、ミスも発生しやすく、出来上がってみれば完全なスパゲッティコード(うわ、古い表現)になってしまうこともシバシバ。

    #もしかして、それは僕の頭が悪いから??

    そこで、従来バッチ的に行っていたユーザー登録を、一人づつのジョブに分割し、コードはあくまでも「一人を登録するための処理」として記述すればよいため、コーディングを簡略化することができます。

    MSMQ には、「トリガー」という便利が機能が用意されており、

    ジョブ(メッセージ)が生成されたらあらかじめ関連付けられたプログラムを自動実行する

    ことができます。これがまた、たまらなくうれしいです。もちろん、リアルタイムに処理されます。

    トリガー機能を自身でコーディングしようとしたら...WMIでファイルシステムの変更を検出して、ファイルを正当性をチェックし、問題が無ければスクリプトを起動する...なんて処理をサービスプログラムとして作成して常駐化しなければなりません。それだけなら「なんだ簡単ジャン」という声もあるかもしれませんが、インストーラを作ったり、環境設定用のGUIを作ったり、ドキュメントを作ったり...納品するまでには長い道のりをたどらなければなりません。

    MSMQ のトリガー機能を使用することで、作成するスクリプトは増えますが、個々のスクリプトが完全に独立しているためメンテナンス性や生産性が向上しますし、キューを増やすことで複数の処理を平行に動かすことも可能になります。

    例えば、大量のユーザー登録を行っている最中にパスワードリセットを行わなければならない場合には、そちらを優先して行いたいですよね。その場合には、パスワード変更用のキューを独立させておけばユーザー登録とパラレルに処理が走ります。

    また、もし処理が失敗してしまったら、いちいちログを吐き出してやり直すなんてことは考えず、ジョブをいったん「失敗キュー」に移動後、再び元に戻してあげれば、トリガーによって処理を繰り返すことが可能です。もちろん、「すぐに繰り返さずに、すこし待つ」なんて考慮も必要ではありますが、バッチ処理で考慮するよりははるかにシンプルに実装できます。

    どうでしょう。使いたくなりましたよね、MSMQ。

    次回は、MSMQ のインストールと環境設定を行います。

    MSMQ についてもっと勉強したい!という方は、MSDN の以下のページをご覧ください。日本語で丁寧に解説されています。

    Microsoft Message Queueing(日本語)
    http://msdn.microsoft.com/ja-jp/library/bb970313.aspx

    メッセージキュー SDKドキュメント(日本語)
    http://msdn.microsoft.com/ja-jp/library/cc448132.aspx

    OSにもヘルプがついていますので、そちらもご覧ください。

  • 【TechEd】ライトニングトーク サンプル ~ MSMQ を使用した確実なユーザー登録 ~

    Tech・Ed 2008 YOKOHAMA では、5分間のプレゼンを競い合う ライトニングトーク が開催されます。詳細は以下をご覧ください。

    【News】神様がくれた5分 を何に使いますか?僕なら大ジョッキを2杯飲みますけど... 

    5分頑張れば、定価15万円もするTech・Edのテクニカルセッションを無償で聴講できるのですから、多くのエンジニアの皆さんは知恵を絞っていらっしゃることと思います。

    で、何人かの方々から「レベル感がわからない」というご質問をいただきました.

    そんなに構えていただく必要はありませんが、およそ以下のいずれかに分類されるのかなと思っています。

    • ちょっとした工夫で処理時間を短縮することができる
    • ちょっとした工夫で処理を自動化することができる
    • 一般的にはできないといわれているけど、工夫するとできる
    • 一般的に使われる用途とは別の用途に使うと効果的
    • 開発者向けだと思っていたけど、IT Pro が使うとすごく便利
    • 仕事には関係ないけど、ちょっとうれしい

    などなど。

    自分では当たり前だと思っていても、他の方から見れば意外と「目からうろこ」だったりしますので、遠慮なさらずご応募お待ちしております。

    で、例えば、ということでサンプルを考えてみました。

    MSMQ(Microsoft Message Queue Service)を使用した確実なユーザー登録

    ユーザー管理の問題点の1つとして、ドメインコントローラやネットワーク障害時のリトライが挙げられます。一度失敗すると、どこまで実行したかを調査し、重複の内容再度実行する必要があります。これはフィールドSEにとって大変な手間です。Windows に標準で実装されているMSMQと連携させて実行することで、リトライを容易に、かつ自動化することが可能です。MSMQ は Windows に標準機能として実装されているにもかかわらず、意外と日の目を見ないコンポーネントです。メッセージのキュー管理機能を PowerShell から操作することで、IT Pro でも簡単に高度な制御を実装した登録プログラムを作成することができます。 

    クリックで拡大 

    クリックで拡大

    5分という短い時間ですから、スライドにすると2枚が精いっぱいでしょう。これ以上になると、見ている側に忙しい印象を与えてしまいます。

    MSMQ は IT Pro の方々の眼中にないコンポーネントだったと思うので、のちほど、このスライドを具体的に実装する方法について解説します。