none
Power Shellで、仮想マシンの停止を確認するには?

    質問

  • こんばんは

    タイトル通りなのですが、Power Shellで、仮想マシンの停止を確認したいと思い以下のスクリプトを作成してみました。(実行結果はエラーですが・・・)

    想定している動きとしては、

     

    ①対象ゲストOSのシャットダウンが正常に完了しているか。

    ②正常にシャットダウンが完了していればスクリプト終了。

    ③もし、停止していない場合は閾値を与え、その値を超えたらエラーメッセージを"指定のログフォルダ内に、ログファイルを作成する"。

    (与える閾値は、"30秒待機し、30秒後再度、停止の確認(①)を実行" ⇒ これを5回繰り返す)

     

    ***stop.ps1***

    #結果ログのパス

    $LOG="L:\log\stop.log"

    #ゲストOSの停止待ち(リトライ)間隔(30秒)

    $RETRYSEC = 30

    #ゲストOSの停止待ち(リトライ)回数(5回)

    $RETRYCNT = 5

    #ゲストOS

    $VM="TESTOS"

     

    #停止対象ゲストOSの状態をチェック。

    #閾値を超えても停止していない場合は、異常終了する。

    $Target_vm = Status_Check -vm $vm -WaitSec $RETRYSEC -CntMax $RETRYCNT

    if(Target_vm -eq $null)

    {

    $MSG = (get-date -Format "yyyy/MM/dd HH:mm:ss.ff ") + `

    "ゲストOSが停止していません"

    Add-Content -path $LOG -value

    exit 8

    }

    ***stop.ps1***

     

    稚拙なpower shell スクリプトなんですが、これをpsから実行してみると、以下の"エラー"と"症状"が出ました。

     

    ***エラー***

    C:\test\stop.ps1

    用語'Status_Check'は、コマンドレット、関数、操作可能なプログラム、またはスクリプトファイルとして認識されません。

    用語を確認し、再試行してください。

    発生場所 C:\test\stop.ps1

    + $Target_vm = Status_Check <<<< -vm $VM -WaitSec $RETRYSEC -CntMax $RETRYCNT

    False

     

    ***症状***

    ・psからの実行後、上記のエラーが表示される。

    ・エラー出力後、結果ログ($LOG)を確認。

    ⇒ "stop.log"に、"ゲストOSが停止していません"と入力されているが、指定した閾値は実行しない。(実行エラー直後に、入力される?)

     

    となります。

    これらは何が原因で発生してしまうのでしょうか?

    どのようにすれば、想定通りの動きをするのでしょうか?

     

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

    2011年8月10日 13:00

回答

  • エラーメッセージの通りなんじゃないでしょうか?
    Status_Checkという関数をスクリプト中で定義していないので、定義していないものを呼ぼうとしてもエラーになるのは当然かと思います。

    ところで仮想マシンとはHyper-Vの仮想マシンでしょうか?
    それならばWMIのMsvm_Computersystemクラスを用いるか、codeplexで公開されているライブラリを使うと便利かと思います。
    いずれかを用いて、Status_Check関数を書くことになるかと思います。

    2011年8月10日 20:41
    モデレータ

すべての返信

  • エラーメッセージの通りなんじゃないでしょうか?
    Status_Checkという関数をスクリプト中で定義していないので、定義していないものを呼ぼうとしてもエラーになるのは当然かと思います。

    ところで仮想マシンとはHyper-Vの仮想マシンでしょうか?
    それならばWMIのMsvm_Computersystemクラスを用いるか、codeplexで公開されているライブラリを使うと便利かと思います。
    いずれかを用いて、Status_Check関数を書くことになるかと思います。

    2011年8月10日 20:41
    モデレータ
  • 牟田口大介さん

    こんばんは

     

    はい、Hyper-Vの仮想マシンです。情報が少ない質問で、大変失礼いたしました。

    回答内容とURLを参照し、引き続きスクリプトの作成に取り組みたいと思います。

     

    質問への回答ありがとうございました。

    2011年8月11日 11:33