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

質問
-
宜しくお願いします。
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***
お手数をお掛けしますが、どなたかご教授を宜しくお願いします。
回答
-
現状、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).aspxMsvm_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- 回答としてマーク 三沢健二Moderator 2011年8月19日 7:06
-
こんばんは..
面白そうなスクリプトを考えられてますね..
うまくいったら、ぜひ結果をお願いします。
要件として、何をもって、起動確認、とするか。でしょうか..
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付きの繰り返しループと、
いつまで待つか (何十秒待っても起動確認できなかったらエラーとする)
というのも必要かと。
- 回答としてマーク 三沢健二Moderator 2011年8月19日 7:06
-
jayudego さんのご質問の直接の答えではなく、knoji さんのアイディアに関連しますが、KVP を利用してゲストの起動完了を確認するというスクリプトを以前、書いたことがあります。詳しくは、以下にある hvvmstart2up.vbs というスクリプトです。
Hyper-V Scripting: “実行中”の仮想マシン=ゲスト OS が“実行中”ではない
http://yamanxworld.blogspot.com/2010/07/hyper-v-scripting-os.html- 回答としてマーク 三沢健二Moderator 2011年8月19日 7:06
すべての返信
-
現状、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).aspxMsvm_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- 回答としてマーク 三沢健二Moderator 2011年8月19日 7:06
-
こんばんは..
面白そうなスクリプトを考えられてますね..
うまくいったら、ぜひ結果をお願いします。
要件として、何をもって、起動確認、とするか。でしょうか..
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付きの繰り返しループと、
いつまで待つか (何十秒待っても起動確認できなかったらエラーとする)
というのも必要かと。
- 回答としてマーク 三沢健二Moderator 2011年8月19日 7:06
-
jayudego さんのご質問の直接の答えではなく、knoji さんのアイディアに関連しますが、KVP を利用してゲストの起動完了を確認するというスクリプトを以前、書いたことがあります。詳しくは、以下にある hvvmstart2up.vbs というスクリプトです。
Hyper-V Scripting: “実行中”の仮想マシン=ゲスト OS が“実行中”ではない
http://yamanxworld.blogspot.com/2010/07/hyper-v-scripting-os.html- 回答としてマーク 三沢健二Moderator 2011年8月19日 7:06
-
中年やっちゅうねんさん
こんばんは。
回答ありがとうございます。
今回の要件としては、他の返信にも記載しているのですが、同スクリプト内で単純に、"ゲストOS起動" + "VMの開始を確認" + "指定したログパスへの、メッセージログの出力"が出来れば良いと思っています。
起動の要件がはっきりせず、曖昧な質問で申し訳ございませんでした。
確認できる時に、教えて頂いたURLを参照したいと思うのですが、各URLはどの辺りを目安に参照すれば宜しいでしょうか?
また、出来たらで良いので、簡単なサンプルコードも教えて頂けないでしょうか?
質問ばかりで申し訳ないですが、ご確認を宜しくお願いいたします。