トップ回答者
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が停止していません"と入力されているが、指定した閾値は実行しない。(実行エラー直後に、入力される?)
となります。
これらは何が原因で発生してしまうのでしょうか?
どのようにすれば、想定通りの動きをするのでしょうか?
お手数をかけますが、ご教授を宜しくお願いします。
回答
-
エラーメッセージの通りなんじゃないでしょうか?
Status_Checkという関数をスクリプト中で定義していないので、定義していないものを呼ぼうとしてもエラーになるのは当然かと思います。ところで仮想マシンとはHyper-Vの仮想マシンでしょうか?
それならばWMIのMsvm_Computersystemクラスを用いるか、codeplexで公開されているライブラリを使うと便利かと思います。
いずれかを用いて、Status_Check関数を書くことになるかと思います。- 回答としてマーク 星 睦美 2011年8月12日 0:06
すべての返信
-
エラーメッセージの通りなんじゃないでしょうか?
Status_Checkという関数をスクリプト中で定義していないので、定義していないものを呼ぼうとしてもエラーになるのは当然かと思います。ところで仮想マシンとはHyper-Vの仮想マシンでしょうか?
それならばWMIのMsvm_Computersystemクラスを用いるか、codeplexで公開されているライブラリを使うと便利かと思います。
いずれかを用いて、Status_Check関数を書くことになるかと思います。- 回答としてマーク 星 睦美 2011年8月12日 0:06