none
バッチファイルから、ゲストOS(Hyper-V)のシャットダウンを確認するには? RRS feed

  • 質問

  • こんばんは

    今回も宜しくお願いします。

     

    バッチファイルから、ゲストOS(Hyper-V)の停止を確認したいのですが、その場合はどのようなモジュールを作成すれば宜しいのでしょうか?

    何か方法がありますでしょうか?

     

    もし、ありましたら以下の動きをするバッチファイルを使用したいと考えています。

     

    ***shutdown.bat***

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

    ②正常にシャットダウンが完了していれば、"指定のログフォルダ(D:\LOG等)内に、ログファイル(shutdown.log等)を作成する"。

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

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

    ***shutdown.bat***

     

    としたいです。

    バッチによる方法が無い場合は、Power Shell からでも同じ動きは可能なのでしょうか?

    何か参考になるURLやサンプルコード等をご存知でしたら、ご教授をお願いします。

     

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

    2011年8月8日 13:11

回答

  • VBScriptと、バッチファイルの組み合わせであれば可能かと思います。
    VBScriptで、WMIの「Msvm_ComputerSystem」クラスを使うと、状態取得やシャットダウンなどいろいろできます。

    過去のスレッドにもサンプルがありますので、参考になさってはいかがでしょうか。

    ->http://social.technet.microsoft.com/Forums/ja-JP/hypervja/thread/9474ebd2-1679-4666-ae45-f9e4b1c1fd61/

     


    2011年8月10日 5:36
  • Status_Check Commandletがどういったものかは、私もわかりませんが、

    別解として、「PowerShell Management Library for Hyper-V」を使って、Power Shellスクリプトを組んでみてはいかがでしょうか。
    Hyper-Vを操作する PowerSHell ライブラリとして、自分の中では一番有名だと思っています。

    http://pshyperv.codeplex.com/

    とはいえ私がまだPowerShellのスキルがあまりないので、サンプルはかけませんが(^^;;;;;


    2011年8月12日 6:36
  • こんにちは。

    エラーメッセージの通り、"Status_Check"なるものがコマンドレットや関数として
    定義されていないためです。

    おそらくは、Webページ等にあるサンプルコードに Status_Check という記載があり、
    そこから引用されたものと思います。
    そちらのURLをご紹介いただけると、Status_Checkが何者か推測できますので、
    皆様も回答し易くなるのかな、と思います。

     

    2011年8月10日 16:15

すべての返信

  • VBScriptと、バッチファイルの組み合わせであれば可能かと思います。
    VBScriptで、WMIの「Msvm_ComputerSystem」クラスを使うと、状態取得やシャットダウンなどいろいろできます。

    過去のスレッドにもサンプルがありますので、参考になさってはいかがでしょうか。

    ->http://social.technet.microsoft.com/Forums/ja-JP/hypervja/thread/9474ebd2-1679-4666-ae45-f9e4b1c1fd61/

     


    2011年8月10日 5:36
  • gogo_umasanさん

     

    こんばんは

     

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

     

    VBScriptと、バッチファイルの組み合わせで作成する方法は初めて知りました。

    参考にさせて頂きます。

     

    また機会があれば宜しくお願いします。

    2011年8月10日 11:59
  • こんばんは

    今回も宜しくお願いします。

     

    バッチファイルから、ゲストOS(Hyper-V)の停止を確認したいのですが、その場合はどのようなモジュールを作成すれば宜しいのでしょうか?

    何か方法がありますでしょうか?

     

    もし、ありましたら以下の動きをするバッチファイルを使用したいと考えています。

     

    ***shutdown.bat***

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

    ②正常にシャットダウンが完了していれば、"指定のログフォルダ(D:\LOG等)内に、ログファイル(shutdown.log等)を作成する"。

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

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

    ***shutdown.bat***

     

    としたいです。

    バッチによる方法が無い場合は、Power Shell からでも同じ動きは可能なのでしょうか?

    何か参考になるURLやサンプルコード等をご存知でしたら、ご教授をお願いします。

     

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


    昨日の質問の中で、power shell による方法も聞いてみたのですが一旦、以下のように作成してみました。(エラーですが・・・)

     

    ***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日 12:41
  • こんにちは。

    エラーメッセージの通り、"Status_Check"なるものがコマンドレットや関数として
    定義されていないためです。

    おそらくは、Webページ等にあるサンプルコードに Status_Check という記載があり、
    そこから引用されたものと思います。
    そちらのURLをご紹介いただけると、Status_Checkが何者か推測できますので、
    皆様も回答し易くなるのかな、と思います。

     

    2011年8月10日 16:15
  • natsume530さん

    こんばんは。

     

    関数などが定義されていないためによる、エラーの可能性高いという事ですね。

    もう少し情報を探してみます。

     

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

    2011年8月11日 11:37
  • Status_Check Commandletがどういったものかは、私もわかりませんが、

    別解として、「PowerShell Management Library for Hyper-V」を使って、Power Shellスクリプトを組んでみてはいかがでしょうか。
    Hyper-Vを操作する PowerSHell ライブラリとして、自分の中では一番有名だと思っています。

    http://pshyperv.codeplex.com/

    とはいえ私がまだPowerShellのスキルがあまりないので、サンプルはかけませんが(^^;;;;;


    2011年8月12日 6:36
  • こんにちは、フォーラムオペレーターの三沢健二です。

    gogo_umasan さん、natsume530 さん、アドバイスありがとうございます。

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


    こちら のスレッドでも類似のご質問を投稿されていましたが、「何をもって OO とみなすのか」 の部分が一番難しいところだと思いますので(色々な考え方があると思いますので)、この部分についてもう少し jayudego さんご自身の考えなどもお伝えいただいた方が良いのではないかなと思いました。


    それでは、今後とも TechNet Forum をよろしくお願いします。
    (もしよろしければ、アドバイスを送る側としてもフォーラムにご参加いただければと思います)

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

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