• 【IDM】監査イベントを監視してユーザー管理を自動化するためのスクリプト(汎用版)

    4月24日のセミナー「AD 次の一手」にて、「小規模なシステムの場合には、高価なパッケージではなくスクリプトレベルのプログラミングで同期を行うことも可能」というお話をしました。

    セミナー資料にはスクリプトを掲載することができませんでしたが、ここに使用したスクリプトを掲載いたします。

    以下のスクリプトは、DC001 というドメインコントローラに接続して、監査イベント 4720 と 5136 を待ち合わせるものです。VBscript で書かれていますので、拡張子を vbs として保存し、コマンドプロンプトから実行してください。

    CScript xxxxx.vbs

    くれぐれも、あたまの CScript を忘れないでください。忘れると、ポップアップメッセージが大量に表示されることになります。もしくは、以下のコマンドで、事前にスクリプトのホストを cscript に変更しておきましょう。

    Cscript //h:cscript

    ユーザー管理に関する監査イベントの詳細については、以下をご参照ください。 

    【Windows Server 2008】監査イベントの Event ID が変わります
    http://blogs.technet.com/junichia/archive/2008/01/11/2008-id.aspx

    strDC = "DC001"
    UserAdmin = ""
    UserPassword = ""

    Rec = now & ",ドメインコントローラに接続します," & "DC=" & strDC
    Set objLocator = CreateObject("WbemScripting.SWbemLocator")
    objLocator.Security_.Privileges.AddAsString "SeSecurityPrivilege", True
    Set objService = objLocator.ConnectServer(DC, "root\cimv2", UserAdmin, UserPassword)

    If Err.Number = 0 Then
       Rec = now & ",ドメインコントローラへの接続完了," & "DC=" & strDC
       wscript.echo Rec
    End If

    strQuery = "Select * from __InstanceCreationEvent WITHIN 10" & _
               " where TargetInstance isa 'Win32_NTLogEvent' and " & _
               "TargetInstance.LogFile='Security' and " & _
               "(TargetInstance.EventCode='4720' Or TargetInstance.EventCode='5136')"

    Set colMonitoredEvents = objService.ExecNotificationQuery(strQuery, "WQL", 48)

    If Err.Number = 0 Then
       Rec = now & "," & strDC & " の監査イベントを監視しています"
       Wscript.Echo Rec
    End If

    Do

        set objLatestEvent = colMonitoredEvents.NextEvent

        Message = objLatestEvent.TargetInstance.Message
        colMessage = split(Message,vbCrLf)
        For each m in colMessage
           Wscript.Echo m
           'ここに  m を解析し、同期を行う処理を組み込む
        Next

    Loop
     

    実行結果例を以下に示します。

    C:\tmp>cscript waitevent.vbs
    Microsoft (R) Windows Script Host Version 5.7
    Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

    2008/04/25 22:32:56,ドメインコントローラへの接続完了,DC=DC001
    2008/04/25 22:32:56,JUNICHIA03 の監査イベントを監視しています
    ディレクトリ サービス オブジェクトが変更されました。

    サブジェクト:
            セキュリティ ID:                S-1-5-18
            アカウント名:           JUNICHIA03$
            アカウント ドメイン:            EXAMPLE64
            ログオン ID:            0x451127

    ディレクトリ サービス:
            名前:   example64.jp
            種類:   Active Directory ドメイン サービス

    オブジェクト:
            DN:     CN=junichia,CN=Users,DC=example64,DC=jp
            GUID:   {94E6B11B-BCF9-407E-8B73-0CF88BA1638B}
            クラス: user

    属性:
            LDAP 表示名:    unixUserPassword
            構文 (OID):     2.5.5.10
            値:     <Binary>

    操作:
            種類:   値が削除されました
            相関 ID:        {D55665FD-B5BA-4E64-BD95-E9D2CBE1A690}
            アプリケーションの相関 ID:      -
    ディレクトリ サービス オブジェクトが変更されました。

    サブジェクト:
            セキュリティ ID:                S-1-5-18
            アカウント名:           JUNICHIA03$
            アカウント ドメイン:            EXAMPLE64
            ログオン ID:            0x451127

    ディレクトリ サービス:
            名前:   example64.jp
            種類:   Active Directory ドメイン サービス

    オブジェクト:
            DN:     CN=junichia,CN=Users,DC=example64,DC=jp
            GUID:   {94E6B11B-BCF9-407E-8B73-0CF88BA1638B}
            クラス: user

    属性:
            LDAP 表示名:    unixUserPassword
            構文 (OID):     2.5.5.10
            値:     <Binary>

    操作:
            種類:   値が追加されました
            相関 ID:        {D55665FD-B5BA-4E64-BD95-E9D2CBE1A690}
            アプリケーションの相関 ID:      -

  • 4/24 「Active Directory 次の一手」にお越しくださった皆様 ありがとうございました ~ 今度は皆さんの番です

    先週から今週にかけ、コンテンツ準備+登壇 が続き、 blog の更新を怠っておりました。 

    4月24日に開催した 「Active Directory 次の一手」 にお越しいただいた皆様、ありがとうございました。

    朝から晩まで、Active Directroy 付けで大変お疲れになったと思います。91名のお申し込みで、65名の参加となりました。

    マイクの調子が悪い場面もあり、また会場が広い割にはスクリーンが小さく、見えずらかった場面もあったかと思いますが、最後までお付き合いいただきありがとうございました。

    さて、セミナーの主旨と内容は高添の blog にも書かれているとおりですので省略しますが、私が担当した「ID管理の自動化」では、「お客様から出された要件定義書を 、フィールドSE さんたちが どのように咀嚼し、Active Directroy をご提案ただきたいか」 というお話をさせていただきました。

    実は、つい先日の4月21日でMS入社後1年が経過しましたが、今回のセミナー開催にあたり、「お客様への提案書を書くときの8割ワクワク、2割不安...」という気持ちを久しぶりに味わった気がします。

    セミナーで時間の都合上お見せできなかったデモや、デモで使用したスクリプトの解説、補足情報とより詳細な解説、新しい情報を blog を通じて発信してまいりますので、楽しみに(?)してください。

    今回、我々エバンジェリストは、MS社員というよりも、エンジニアとしての想いでコンテンツ作りをしました(とはいえ、扱う製品はMS製品になってしまうわけですが)。それは「仲間を増やしたい」と願っているからです。今回のセミナーでいえば、「Active Directory はもっと面白いはずだ!」という想いを共有したいからです。

    共有してどうするのか....「何か」楽しいことをやりたいと考えています。たとえば、Directory Expert Conference の日本開催とか、 ADの情報発信者集団である 「AD GEEK の会」 を結成するとか...。

    そのためには、ADだけ知っていても仕方がないわけで、常に他の技術との比較検討をされている現場のエンジニアの皆様の持つノウハウやご協力が必要だと感じています。

    エバンジェリストの仕事は「情報発信」だけだと思われ���ちですが、現場の皆様に対して生の情報発信をお願いするとともに、そうした皆様の情報発信をバックアップすることも大切な仕事です。

    特に、Active Directory に関する情報は、ツールの使い方やトラブルシューティングを含め、現場のSEさんが多くの情報をお持ちだと思いますし、そうした情報を発信する場を求めているSEさんもいらっしゃるかもしれません。もしくは、「自分一人だときついけど、同じ想いの仲間がいればなぁ」と思っているSEさんもいらっしゃることでしょう。

    • 「こういう情報があるんだけど、発信の場がない」
    • 「仲間を作って、特定分野の情報をまとめてみたい」
    • 「あまり広く深く知っているわけではないけど、この分野ならば情報発信できるかも」
    • 「コミュニティに参加したいけど、あまり知らない人と話するのは苦手だし....ちょっと面倒。でも何かやりたい。」
    • 「業務が忙しいから、そうそう毎回うごけるわけではない。でも1回くらい、セミナーを担当してみてもよいかな」 
    • 「特定の技術分野について’少数の人たち' と話をしたい」
    • 「微力かもしれないけど、IT業界活性化のために何かをしたい!」

    といったことを思っていらっしゃるエンジニアのかたがたは、遠慮なく私や他のエバンジェリストにコンタクトしてください。

    いますぐ何かができるわけではありませんが、小さなことをコツコツと積み重ねていきたいと考えています。

    社外活動は、きっとエンジニアのみなさんのモチベーションを高めてくれるはずです。

    コンタクトをお待ちしております。

  • MSC 2008 へのご来場 ありがとうございました

    the Microsoft Conference 2008 へのご来場、ありがとうございました。

    また、2日目 10:00 ~ Room B での Server Core をお聞きくださった皆様、比較的地味な内容にもかかわらず、ご来場/ご静聴いただきましたこと、心より感謝いたします。

    Room B は今回のイベントで最も大きな会場であるにもかかわらず、750 の座席が満席だったことは壇上からもわかりました。

    セッション終了後、「ASK the SPEAKER」で QA を受け付ける旨を申し上げなかったせいでしょうか..あまり質問にいらっしゃる方が無く少々さみしい思いもしましたが、会場をうろうろしている際に何度か声をかけていただきました。

    セッション中、「こまかな情報は是非とも blog で!」とご案内したせいでしょうか、4月16日の午後より blog へのアクセス数がじわじわとのびはじめ、昨日のアクセス数は過去最高となりました。 

    検索キーワードでも、2008 / Hyper-V / Server Core が上位を占めており、間違いなく、MSC 効果であると言えます。

    # それにしても WSH 5.7 が増えているのはなぜだろう.....

    また、以前の職場でお付き合いのあった複数の方々から「発見」され、久しぶりに会話を交わせたことも大きな収穫でした。

    残念ながら、Server Core セッションは 東京のみでして、名古屋と大阪での開催は今のところ予定はございません。

    まもなく、当日のセッションスライドの公開が予定されておりますので(ビデオも公開されるのかな...?)、当日ご覧になれなかった皆様は是非ともそちらをご覧くださいませ。

    ということでございまして、これからも当 blog を通じて、現場で使える情報を中心に発信してまいります。

    今後とも、おつきあいのほど、よろしくお願いいたします。

     

  • 【Windows Server 2008】Server Core のコマンドプロンプトを手元のコンピュータから起動する~RemoteApp 機能の活用

    何度か この blog でも取り扱っていますが、Server Core を管理する方法は、およそ 3 種類考えられます。

    • 潔く ローカルのコマンドプロンプトを使用する
    • 優雅に リモートからMMCで接続する
    • 華麗に リモートからコマンドを発行する

    どれを使うかは、シチュエーションによると思いますが、今回は「潔くローカルのコマンドプロンプトを使用する」を少しだけ便利にする手順について紹介します。

    Windows Server 2008 のターミナルサービスには、RemoteApp という機能が実装されました。

    Windows Server 2008 ターミナルサービスについては、@IT さんに以前私が執筆した記事が公開されていますのでごらんください。

    第8回 ターミナル・サービスによるクライアントの仮想化(前編)
    http://www.atmarkit.co.jp/fwin2k/winsv2008/08ts_01/08ts_01_01.html

    第9回 ターミナル・サービスによるクライアントの仮想化(中編)
    http://www.atmarkit.co.jp/fwin2k/winsv2008/09ts_02/09ts_02_01.html

    第10回 ターミナル・サービスによるクライアントの仮想化(後編)
    http://www.atmarkit.co.jp/fwin2k/winsv2008/10ts_03/10ts_03_01.html

    上の記事でも紹介していますが、RemoteApp を使用すると、ターミナルサービス上にインストールされたアプリケーションを、あたかも手元のコンピュータにインストールされているかのように使用することができます。

    Server Core にも、管理を目的としたターミナルサービスが実装されており、RemoteApp を使用することができます。Server Core の RemoteApp を使用すれば、Server Core上のコマンドプロンプトを手元のコンピュータ上から簡単に起動することができるため、私はこの方法が気に入っています。

    Server Core をインストールすると自動的にサービスが有効化されるので、役割のインストールを行う必要はありませんが、既定ではリモートからの接続は禁止されています。

    それでは、Server Core でRemoteAppを使用するための手順を以下に示します。

    1. ターミナルサービスへの接続を有効にする
    2. ターミナルサービスはインストール直後に起動はされていますが、以下の2つの設定によってリモートからの接続が抑止されています。

      • ファイアウォールの「リモートデスクトップ(TCP接続)」 ルール
      • 以下のレジストリエントリの設定値
        System/CurrentControlSet/Control/Terminal Server 配下の fDenyTSConnections
        0:許可 1:拒否(規定値)

      上記を有効にするには、以下のコマンドをServer Core 上のコマンドプロンプトから実行します。

      scregedit /ar 0

      これで リモートからServer Core のターミナルサービスに接続することができるようになりました。他のポートを開く必要はありません。

    3. RemoteApp に CMD.EXE を登録する
    4. GUIが使用可能なリモートコンピュータから、 ターミナルサービスの RemoteApp マネージャを使用してアプリケーション(今回はCMD.EXE)を登録します。手順は、@IT の記事に書かれていますので、以下をご覧ください。

      第10回 ターミナル・サービスによるクライアントの仮想化(後編) - 3.ターミナル・サービス環境を整える(1)
      RemoteAppにアプリケーションを公開する

      リモートコンピュータが近くにない場合や、GUI が面倒という方は、以下のレジストリファイルをメモ帳等で作成し、拡張子 reg で保存後、Server Core 上で実行してください。もちろん、regedit を起動してから読み込むこともできます。

      Windows Registry Editor Version 5.00

      [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TsAppAllowList\Applications\cmd]
      "CommandLineSetting"=dword:00000000
      "RequiredCommandLine"=""
      "IconIndex"=dword:00000000
      "IconPath"="c:\\Windows\\System32\\cmd.exe"
      "Path"="c:\\Windows\\System32\\cmd.exe"
      "VPath"=""
      "ShowInTSWA"=dword:00000001
      "Name"="cmd.exe"  

    5. rdp ファイルを作成する
    6. リモートコンピュータから Server Core のターミナルサービスに接続し、RemoteApp マネージャを使用して、上で作成した CMD.EXE 用の  rdp ファイルを作成します。rdp ファイルを自身のコンピュータ上のデスクトップに保存しておくことで、ダブルクリックするだけで Server Core のコマンドプロンプトを開くことができます。

      作成の手順についても、@IT の以下の記事に書かれていますのでご参照ください。

      第10回 ターミナル・サービスによるクライアントの仮想化(後編) - 4.ターミナル・サービス環境を整える(2)
      └ クライアントのデスクトップからRemoteAppを利用できるように構成する

      もし、リモートコンピュータから GUIで操作するのが面倒であれば、以下のファイルをコピペして、拡張子 rdp ��自身のコンピュータ上に保存してください。太字部分は Server Core のIP アドレスですので、必要に応じて変更してください。

      redirectclipboard:i:1
      redirectposdevices:i:0
      redirectprinters:i:1
      redirectcomports:i:1
      redirectsmartcards:i:1
      devicestoredirect:s:*
      drivestoredirect:s:*
      redirectdrives:i:1
      session bpp:i:32
      span monitors:i:1
      prompt for credentials on client:i:1
      remoteapplicationmode:i:1
      server port:i:3389
      allow font smoothing:i:1
      promptcredentialonce:i:1
      authentication level:i:0
      gatewayusagemethod:i:2
      gatewayprofileusagemethod:i:0
      gatewaycredentialssource:i:0
      full address:s:192.168.7.21
      alternate shell:s:||cmd
      remoteapplicationprogram:s:||cmd
      gatewayhostname:s:
      remoteapplicationname:s:cmd.exe
      remoteapplicationcmdline:s:

     

    これで準備は整いました。

    rdp ファイルをダブルクリックすると、Server Core 上のコマンドプロンプトが開きます。初回はユーザーIDとパスワードの入力が求められますが、「資格情報の保存」をチェックしておけば、2回目以降問われることはありません。

    ためしに、「 Set c 」を入力してみてください。%ComputerName% 環境変数に、Server Core のホスト名が格納されていることがわかるはずです。

    で、この機能の便利で面白いところは、実はこれだけではありません。

    コマンドプロンプトから、regedit や notepad を起動してみてください。

    コマンドプロンプト上から起動したこれらのアプリケーションは、実は Server Core 上で動いています。notepad で「開く」や「保存」を選択すると、「懐かしいタイプのダイアログボックス」が開くことからも、Server Core 上の notepad であることがわかります。

     

  • 【OpsMgr 2007】SP1 リリース ~ 余談ですが 「配布アプリケーション」あらため「分散アプリケーション」

    Operation Manager 2007 Service Pack 1 がリリースされました。

    Operations Manager 2007 Service Pack 1 Upgrade Package - 日本語
    http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=ede38d83-32d1-46fb-8b6d-78fa1dcb3e85

    先ほど、同じエバンジェリストの高添から実際に動いているところを見せてもらったのですが、ちょっと感動するくらいに変わっていました。

    具体的な修正内容は、以下に書かれている通りです(現時点で英語ですが、日本語ページを準備中とのこと)。

    What's New in Operations Manager 2007 Service Pack 1
    http://technet.microsoft.com/ja-jp/library/bb821996(en-us).aspx

    • Webコンソールやレポートも含めたパフォーマンスの向上
    • コンソール上の検索ボックスで、ルールとモニタが検索できる
    • SNMP V1/V2 をサポートしたデバイスの監視
    • ダイアグラムを VISIO のVDX形式で保存
    • アラートの詳細表示画面でコピペ(ctrl+c / ctrl+v)ができるようになった
    • クラスタ構成を含め、バックアップとリストアが行いやすくなった
      ※OpsMge VSS Writer も実装された!
    • レポートをSharePoint上に発行
    • ローカライズ製品(日本語版とか)を使用した場合の表示系が改善された

    などなど....

    システム センター Operations Manager 2007 Service Pack 1 に修正される問題の一覧 (機械翻訳)
    http://support.microsoft.com/default.aspx/kb/944443

    機械翻訳結果がおかしい時は、是非ともフィードバックください!
    たとえば「システム センター」じゃなくて「System Center 」だろ!とか、「 『could be』 が 『缶ある』 」になっているとか。

    で、ですね。これまで Operations Manager 2007 を使用していた方はおそらく1つの疑問があったと思うのです。

    「配布アプリケーションて いったい何?」

    私も疑問でした。でも、今回の SP1 で謎が解けました。

    分散アプリケーション」のことだったんですね....。

    そっか、逆翻訳すれば、Distributed Application か....至極納得。

    そんな部分も含めて修正されていますので、是非ともお試しください。