none
仮想サーバ起動後の、起動確認スクリプトを追加するには?(Windows Power Shell) RRS feed

  • 質問

  • 宜しくお願いします。

     

    Windows Power Shell を使用し、Hyper-V上の仮想サーバ起動スクリプトを作成しました。(稼働も確認しました)

    このスクリプトを基に"起動確認スクリプト"も追加したいのですが、その作成方法が分かりません。

    追加する"起動確認スクリプト"の動きとしては、

     

    ・仮想サーバ起動を確認(作成済み) → "指定のログフォルダ内に、ログファイルを作成する"

     

    です。

    "指定のログフォルダ内に、ログファイルを作成する"の詳細ですが、

     

    ・ログフォルダパス

    → D:\LOG

     

    ・ログファイル名

    → boot

     

    ・ログファイルの中身

    → 成功時:起動完了

    → 失敗時:起動エラー

     

    としたいです。 

    以下に、現状のスクリプトを記載します。

     

    ***boot.ps1***

    $ns = "root\virtualization"
    $vms_name = "TEST_OS"(仮想サーバ名です)

    $vmCollection = gwmi -Namespace $ns Msvm_Computersystem -Filter "Description = 'Microsoft Virtual Machine'"
    $vmCollection | foreach {
         $vm = $_;
         $vms_name | foreach {
              if($vm.ElementName -eq $_) {
                  $vm.RequestStateChange(2) | Out-Null
                  Start-Sleep -Milliseconds 1000
                  }
              }
         }

     

    ここに、"起動確認スクリプト"を追加したいです。

    ***boot.ps1***

     

    お手数をお掛けしますが、どなたかご教授を宜しくお願いします。


    2011年8月7日 3:53

回答

  • 現状、Msvm_Computersystem の RequestStateChange method で仮想マシンを起動しているので、この return value が Completed with No Error (0) かどうかで起動を確認する方法か、同じく Msvm_Computersystem の EnabledState で確認すればよさそうです。

    RequestStateChange Method of the Msvm_ComputerSystem Class
    http://msdn.microsoft.com/en-us/library/cc723874(VS.85).aspx

    Msvm_ComputerSystem Class
    http://msdn.microsoft.com/en-us/library/cc136822(v=VS.85).aspx


    確認した結果は、FileSystemObject の CreateTextFile でログを作成し、WriteLine で書き込めます。

    スクリプト出力の保存
    http://technet.microsoft.com/ja-jp/scriptcenter/ff587487.aspx

    2011年8月8日 3:22
  • こんばんは..
    面白そうなスクリプトを考えられてますね..
    うまくいったら、ぜひ結果をお願いします。


    要件として、何をもって、起動確認、とするか。でしょうか..

    VMを開始することが正常に出来れば、EnabledState は 2 になりますが、
    VMの中のOSは起動中で、まだログイン可能になっていません。

    VMを開始できたことで、起動確認とするのでしたら、
    それで十分と思いますが。


    もし、VMのOS(Windows?) が起動完了したことまで含めて
    起動確認とされるのでしたら、
    VMの中への通信が出来るとか、
    VMの中で、Run レジストリなどを使って、
    何かアクションを起こさせて、それを確認するとか、
    そういった方法があるかもしれません。

    http://support.microsoft.com/kb/179365/ja
    [INFO] Run、RunOnce、RunServices、RunServicesOnce レジストリ キーと [スタートアップ] フォルダの関係


    あるいは、
    KVPを使って、VMの中の 統合サービスが起動したことを
    確認するのでも、目的が果たせるかもしれません。

    例えば、 FullyQualifiedDomainName か NetworkAddressIPv4
    に値が設定されるまで待つ。とか。

    KVPは、下を見てください。
    http://blogs.technet.com/b/junichia/archive/2009/06/12/3253869.aspx
    http://blogs.technet.com/b/junichia/archive/2009/06/13/3253986.aspx


    ただ、何を待つにしても、 sleep付きの繰り返しループと、
    いつまで待つか (何十秒待っても起動確認できなかったらエラーとする)
    というのも必要かと。

    2011年8月8日 9:47
  • jayudego さんのご質問の直接の答えではなく、knoji さんのアイディアに関連しますが、KVP を利用してゲストの起動完了を確認するというスクリプトを以前、書いたことがあります。詳しくは、以下にある hvvmstart2up.vbs というスクリプトです。

    Hyper-V Scripting: “実行中”の仮想マシン=ゲスト OS が“実行中”ではない
    http://yamanxworld.blogspot.com/2010/07/hyper-v-scripting-os.html

    2011年8月8日 10:05

すべての返信

  • 現状、Msvm_Computersystem の RequestStateChange method で仮想マシンを起動しているので、この return value が Completed with No Error (0) かどうかで起動を確認する方法か、同じく Msvm_Computersystem の EnabledState で確認すればよさそうです。

    RequestStateChange Method of the Msvm_ComputerSystem Class
    http://msdn.microsoft.com/en-us/library/cc723874(VS.85).aspx

    Msvm_ComputerSystem Class
    http://msdn.microsoft.com/en-us/library/cc136822(v=VS.85).aspx


    確認した結果は、FileSystemObject の CreateTextFile でログを作成し、WriteLine で書き込めます。

    スクリプト出力の保存
    http://technet.microsoft.com/ja-jp/scriptcenter/ff587487.aspx

    2011年8月8日 3:22
  • こんばんは..
    面白そうなスクリプトを考えられてますね..
    うまくいったら、ぜひ結果をお願いします。


    要件として、何をもって、起動確認、とするか。でしょうか..

    VMを開始することが正常に出来れば、EnabledState は 2 になりますが、
    VMの中のOSは起動中で、まだログイン可能になっていません。

    VMを開始できたことで、起動確認とするのでしたら、
    それで十分と思いますが。


    もし、VMのOS(Windows?) が起動完了したことまで含めて
    起動確認とされるのでしたら、
    VMの中への通信が出来るとか、
    VMの中で、Run レジストリなどを使って、
    何かアクションを起こさせて、それを確認するとか、
    そういった方法があるかもしれません。

    http://support.microsoft.com/kb/179365/ja
    [INFO] Run、RunOnce、RunServices、RunServicesOnce レジストリ キーと [スタートアップ] フォルダの関係


    あるいは、
    KVPを使って、VMの中の 統合サービスが起動したことを
    確認するのでも、目的が果たせるかもしれません。

    例えば、 FullyQualifiedDomainName か NetworkAddressIPv4
    に値が設定されるまで待つ。とか。

    KVPは、下を見てください。
    http://blogs.technet.com/b/junichia/archive/2009/06/12/3253869.aspx
    http://blogs.technet.com/b/junichia/archive/2009/06/13/3253986.aspx


    ただ、何を待つにしても、 sleep付きの繰り返しループと、
    いつまで待つか (何十秒待っても起動確認できなかったらエラーとする)
    というのも必要かと。

    2011年8月8日 9:47
  • jayudego さんのご質問の直接の答えではなく、knoji さんのアイディアに関連しますが、KVP を利用してゲストの起動完了を確認するというスクリプトを以前、書いたことがあります。詳しくは、以下にある hvvmstart2up.vbs というスクリプトです。

    Hyper-V Scripting: “実行中”の仮想マシン=ゲスト OS が“実行中”ではない
    http://yamanxworld.blogspot.com/2010/07/hyper-v-scripting-os.html

    2011年8月8日 10:05
  • knojiさん

    こんばんは。

     

    回答ありがとうございます。

    今回の要件としては、返信して頂いたメールのように、単純に"VMの開始を確認" + "指定したログパスへの、メッセージログの出力"が出来れば良いと思っています。

    起動確認といっても要件によってはいくつかの方法が考えられるのですよね・・・曖昧な質問で申し訳ございませんでした。

    Power shell 自体、最近始めたばかりのため簡単な動きを確認できればなと思い今回の質問をさせて頂きました。

     

    教えて頂いたURLを参照させて頂きます。

    ありがとうございました。

    2011年8月8日 12:16
  • 中年やっちゅうねんさん

    こんばんは。

     

    回答ありがとうございます。

    今回の要件としては、他の返信にも記載しているのですが、同スクリプト内で単純に、"ゲストOS起動" + "VMの開始を確認" + "指定したログパスへの、メッセージログの出力"が出来れば良いと思っています。

    起動の要件がはっきりせず、曖昧な質問で申し訳ございませんでした。

     

    確認できる時に、教えて頂いたURLを参照したいと思うのですが、各URLはどの辺りを目安に参照すれば宜しいでしょうか?

    また、出来たらで良いので、簡単なサンプルコードも教えて頂けないでしょうか?

     

    質問ばかりで申し訳ないですが、ご確認を宜しくお願いいたします。

    2011年8月8日 12:28
  • Yamauchi Kazuoさん
    こんばんは。
    回答ありがとうございます。
    KVP を利用した起動確認は初めて知りました。
    教えて頂いたURLも確認して、方法を検討してみたいと思います。
    ありがとうございました。
    2011年8月8日 12:32
  • こんにちは、フォーラムオペレーターの三沢健二です。

    みなさん、様々なアドバイスありがとうございます。

    今回、アドバイスいただいた内容が参考になられたようですので、勝手ながら [回答としてマーク] を付けさせていただきました。


    それでは、今後とも TechNet Forum をよろしくお願いします。

    ______________________________________
    日本マイクロソフト株式会社 フォーラム オペレーター 三沢健二

    2011年8月19日 7:07
    モデレータ