IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

Hyper-V の部屋

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第20回 PowerShellによるHyper-V環境の管理 (小塚大介) 2016年1月

 サーバーを構築して運用していると、日々の運用を自動化するためにバッチファイルを作って定期的に自動タスクで実行することは珍しくありません。例えばHyper-Vを使った仮想化システムの場合でもPowerShellを使って自動化をすることができます。今回はPowerShellの基本的な操作と、PowerShellによるHyper-V環境の管理について書いていきます。

Windows Server 2012 R2 のほとんどの機能をPowerShell で操作可能

 PowerShell は当初Windows Server 2003 や Windows Vista へのアドオンの形でリリースされていましたが、Windows Server 2012 R2 ではPowerShellが標準搭載されています。

 このPowerShellは.ps1という拡張子のファイルにテキストベースでコマンドを書き込むことでバッチとして実行することができます。もちろん Windows のタスクとして実行することも可能です。PowerShell のコマンド体系はある程度統一されていて、Get-XX や Remove-XX など推測しやすい形なので、ある程度慣れてくるとコマンドを知らなくてもインテリセンスとヘルプを利用して目的の操作に到達することができます。PowerShellの基本的な使い方はWeb上に情報がたくさんありますし、Microsoftでは動画でも学習できるようにしていますので興味があれば見てみてください。また、Windows Server 2012 R2 ではほとんどの機能をPowerShellで操作することが可能です。Windows Server 2012 R2 用のリファレンスは Web サイト(https://technet.microsoft.com/library/dn249523.aspx) で参照できます。

PowerShell から Hyper-V を操作する

 それでは早速 PowerShell を使って Hyper-V を操作してみます。まずは Windows PowerShell を起動します。アプリケーションの一覧では Windows システム ツールの中にありますし、[ファイル名を指定して実行] から PowerShell を実行してもかまいません。

fig01

fig02

 まずは仮想マシンの一覧を取得します。 Get-VM と入力して実行します。すると仮想マシンの一覧とそれぞれのCPUの使用率、メモリの割り当て量などが表示されます。

fig03

 仮想マシンの台数が多いので、仮想マシン名に "WAP" という文字列が含まれている仮想マシンだけを抽出したいと思います。この場合は Get-VM | Where-Object {$_.Name  like "*WAP*"} と入力して実行します。

fig04

 Where-Object コマンドレットによって、ほかのコマンドレットから返されたデータをフィルタすることができます。今回は  like 演算子を使用していますが、他の演算子を使用することで完全一致するデータのみを表示したり、指定値より大きいデータを表示したりできます。 Where-Object コマンドレットについては こちら を確認してください。

 次に仮想マシンを停止させてみます。仮想マシンを停止するには Stop-VM コマンドレットを使います。 Stop-VM  Name <仮想マシン名> -Force と入力して実行します。コマンドを実行したら Get-VM を使って状態を確認し、 [State] が Off になっていることを確認します。

fig05

 ここで Stop-VM コマンドに  Force オプションを指定したのは、仮想マシンをユーザーロックしている場合にも強制的にシャットダウンするためです。もし  Force オプションを指定せず、仮想マシンがロックされている場合はエラーが発生します。

fig06

 次に仮想マシンを起動します。仮想マシンの起動には Start-VM コマンドを利用します。Start-VM  Name <仮想マシン名> と入力して実行します。その後 Get-VM コマンドを使って [State] が Running に変わっていることを確認します。

fig07

 次に、複数の仮想マシンをまとめて操作してみます。PowerShellは For 文や While 文も使えますが、今回は別の方法を使います。先のGet-VMの説明でWhere-Objectを使いましたが、Get-VMで取得した仮想マシンに対して Stop-VM を実行します。そのためには

Get-VM | Where-Object {$_.Name -like "*WAP*"} | Stop-VM  Force のように入力して実行します。この場合、仮想マシン名に"WAP"という文字が含まれる仮想マシンを順番にシャットダウンします。ここでポイントになるのは順番ということです。対象を同時にシャットダウンするのではなく、1つずつシャットダウンしていくので、対象の仮想マシンの台数が多い場合は時間がかかります。もし、他の仮想マシンのシャットダウンを待つ必要がない場合は Get-VM | Where-Object {$_.Name -like "*WAP*"} | Stop-VM  Force  AsJob のようにAsJobオプションを追加して実行します。こうすることでStop-VMコマンドはバックグラウンド処理となり、シャットダウンを待つことはありません。

fig08

コマンドの効果を事前確認する WhatIf オプション

 コマンドでバッチファイルを作っている場合、少し書いては実行して動作を確認することがよくありますが、PowerShellの場合は WhatIf という便利なオプションがあります。例えば、仮想マシンを起動する Start-VM コマンドに WhatIfオプションをつけて実行すると、実際に仮想マシンを起動するのではなく、このコマンドによって何が起きるのかを表示してくれます。

fig09

 先の複数台まとめてシャットダウンするような、少し複雑なコマンドを書いた場合は WhatIf オプションを使うことで意図した結果になるかを確認することができます。

fig10

PowerShell でチェックポイントの管理を行う

 毎日決まった時間に仮想マシンを起動したりシャットダウンしたりする場合にPowerShellでバッチファイルを作成して Windows のタスクで実行することは良くありますが、その他に定期的にチェックポイント(スナップショット)を作成するために使うこともあるようです。1時間に一度チェックポイントを採取して何か起きた場合にロールバックできるようにしておき、夜に仮想マシンのエクスポートとチェックポイントのマージをするようなケースです。

 チェックポイントを作成するには Checkpoint-VMコマンドを使います。 Checkpoint-VM  Name <仮想マシン名> と入力して実行します。また、仮想マシンのチェックポイントの一覧を表示する場合は Get-VMSnapshot  VMName <仮想マシン名> と入力して実行します。

fig11

 仮想マシンをエクスポートするには Export-VM コマンドを使います。Export-VM  Name <仮想マシン名> -Path <保存先> と入力して実行します。

fig12

 チェックポイントを削除する場合はRemove-VMSnapshot コマンドを使います。 Remove-VMSnapshot  VMName <仮想マシン名> と入力して実行すると対象の仮想マシンのすべてのスナップショットを削除します。

 その他のHyper-Vで利用可能なコマンドは こちら にリスト化されていますので、一度眺めてみることをお勧めします。最近はインフラの運用は自動化してオペレーションミスを減らしたり、人的リソースを削減したりする傾向が強くなってきていますし、Windows Server の機能の中にはGUIでは設定できず、PowerShellで設定する」オプションパラメーターなどがあり、PowerShell の重要性は増しています。 ぜひPowerShellの使い方をマスターしてみてください!

 


 

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes