none
WINDOWS2012でのサーバのシャットダウンについて RRS feed

  • 質問

  • 下記スクリプトで仮想サーバをシャットダウンした後サーバを再起動すると

    全てのサーバに図のようにメッセージが出力されます。

    回避するにはどうすればいいでしょうか?

    $ns = "root\virtualization"

    $vmCollection = gwmi -Namespace $ns Msvm_Computersystem -Filter "Description = 'Microsoft Virtual Machine'"
    $vmCollection | foreach {
     if($_.EnabledState -ne "3") {
      $shutdown = gwmi -Namespace $ns -Query "Associators of {$_} Where ResultClass = Msvm_ShutdownComponent"
      $shutdown.InitiateShutdown($true, "停電のためシャットダウン") | Out-Null
      Start-Sleep -Milliseconds 1000
         }
     }

    2013年10月15日 3:11

回答

  • InitiateShutdownメソッドの第一引数は強制終了するかどうかのフラグなので、$trueの場合は強制終了扱いとなります。

    したがって、

    $shutdown.InitiateShutdown($true, "停電のためシャットダウン")

    $shutdown.InitiateShutdown($false, "停電のためシャットダウン")

    と変更してみては如何でしょうか。

    別解としては、Stop-Computerコマンドレットを使う方法があります。こちらの方が記述が容易ですので推奨です。

    • 回答としてマーク qoo_man 2013年10月15日 3:36
    2013年10月15日 3:19
    モデレータ
  • まずゲストOSの種類によると思います。

    ゲストOSにHyper-V統合サービスがインストールされている場合は、Stop-VMコマンドレットでシャットダウンが可能ですが、されていない場合はおそらく強制電源オフと同等の動作になると思います。

    Stop-Comuterの場合は対象コンピュータでWMIが利用できて権限があればシャットダウンできます。もちろん仮想マシンではない実機にも使えます。

    Stop-VMというかHyper-Vモジュールを利用する場合は、仮想マシンが本当にシャットダウンして停止したかを後で確認することができるので、こちらで統一するのは一つの手であると思います。

    あとはネットワーク的にどうなっているかにもよるかと思います。仮想マシンがネットワーク的に独立しているのならStop-VMを使うしかないと思います。

    権限にもよると思います。スクリプトを実行する端末からVMホストにアクセス権限はあるがVMゲストには権限がない場合はStop-VM、VMホストにアクセス権限はないがVMゲストには権限がある場合はStop-Computerしか使えないという制限が出てくると思います。

    結局はケースバイケースとなるかと思います。


    • 回答としてマーク qoo_man 2013年10月15日 5:54
    2013年10月15日 4:11
    モデレータ

すべての返信

  • InitiateShutdownメソッドの第一引数は強制終了するかどうかのフラグなので、$trueの場合は強制終了扱いとなります。

    したがって、

    $shutdown.InitiateShutdown($true, "停電のためシャットダウン")

    $shutdown.InitiateShutdown($false, "停電のためシャットダウン")

    と変更してみては如何でしょうか。

    別解としては、Stop-Computerコマンドレットを使う方法があります。こちらの方が記述が容易ですので推奨です。

    • 回答としてマーク qoo_man 2013年10月15日 3:36
    2013年10月15日 3:19
    モデレータ
  • 牟田口様

    いつもお世話になっております。

    早速Falseにして試してみるようにいたします。

    PowerShellの3.0から?

    Stop-Vmというコマンドがあるようですが、こちらを使うのと

    Stop-Computerのどちらが運用しやすいでしょうか?

    よろしくお願いいたします。

    2013年10月15日 3:38
  • まずゲストOSの種類によると思います。

    ゲストOSにHyper-V統合サービスがインストールされている場合は、Stop-VMコマンドレットでシャットダウンが可能ですが、されていない場合はおそらく強制電源オフと同等の動作になると思います。

    Stop-Comuterの場合は対象コンピュータでWMIが利用できて権限があればシャットダウンできます。もちろん仮想マシンではない実機にも使えます。

    Stop-VMというかHyper-Vモジュールを利用する場合は、仮想マシンが本当にシャットダウンして停止したかを後で確認することができるので、こちらで統一するのは一つの手であると思います。

    あとはネットワーク的にどうなっているかにもよるかと思います。仮想マシンがネットワーク的に独立しているのならStop-VMを使うしかないと思います。

    権限にもよると思います。スクリプトを実行する端末からVMホストにアクセス権限はあるがVMゲストには権限がない場合はStop-VM、VMホストにアクセス権限はないがVMゲストには権限がある場合はStop-Computerしか使えないという制限が出てくると思います。

    結局はケースバイケースとなるかと思います。


    • 回答としてマーク qoo_man 2013年10月15日 5:54
    2013年10月15日 4:11
    モデレータ
  • 牟田口様

    いつもお世話になっております。

    ゲストOSによるのですね。

    STOP-ComputerもSTOP-Vmも試してみて違いも見てみます。

    いろいろご解説頂きありがとうございました。

    2013年10月15日 5:57