PowerCLIを使ってVMを管理する。
vSphererとPowerCLI
VMWareの仮想化ソリューションvSphererには、無料で使えるESXiという製品があります。ESXiも他の製品と同じくvSphere ClientというGUIツールから管理を行うのですが、無料ゆえの悲しさか対象のサーバーで稼働中のVMをすべてサスペンドとか、特定のVMをすべて起動すると言った管理系の自動化機能が不足しています。このあたりを補ってくれるのが、コマンドラインインターフェイスのPowerCLIです。
PowerCLIはPowerShellを利用してvSpherer上の仮想PCを操作するコマンドラインインターフェイスで、仮想サーバーへの接続、切断(Connect-VIServer、Disconnect-VIServer)、VMの起動、停止、サスペンド(Start-VM、Stop-VM、Suspend-VM)、VMの作成、削除、移動(New-VM、Remove-VM、Move-VM)、VMの編集(Set-*)、スナップショットの管理(Get-Snapshot、New-SnapShot、Set-SnapShot、Remove-SnapShot)といったコマンドレットが用意されっています。
インストール
現在の最新版はvSphere PowerCLI 5.0.1です。VmWareのダウンロードページからダウンロードできます。
前述のとおり、PowerShell上で動作するのでPowerShellをインストールしていない場合は、別途Microsoftからダウンロードしてインストールしておきましょう。
VMWare VIXコンポーネントが必要なので一緒にインストールされるそうです。”OK”をクリックしましょう。
PowerShellの既定の状態では、ポリシーの設定で外部スクリプトの実行が制限されています。このためPowerCLIを動作させるには、PowerCLIインストール後にポリシーをRemoteSignedよりも緩くしてくださいということです。”Continue”をクリックしましょう。
初期設定
インストール終了後にPowerCLIを実行するとこんな画面になります。
スクリプトの実行がシステムで無効になっているため、ファイル C:\Program Files (x8
)\VMware\Infrastructure\vSphere PowerCLI\Scripts\Initialize-PowerCLIEnvironmen
.ps1 を読み込めません。詳細については、「get-help about_signing」と入力してヘ
ルプを参照してください。
発生場所 行:1 文字:2
. <<<< "C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Script
\Initialize-PowerCLIEnvironment.ps1"
+ CategoryInfo : NotSpecified: (:) []、PSSecurityException
+ FullyQualifiedErrorId : RuntimeException
インストール時にポリシーをRemoteSinged以上に変更しろと言っていたので、PowerCLIを再度管理者として起動して、次のコマンドを実行します。
PS C:\Windows\system32> Set-ExecutionPolicy RemoteSigned
実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシー
を変更すると、about_Execution_Policies のヘルプ
トピックで説明されているセキュリティ上の危険にさらされる可能性があります。実行
ポリシーを変更しますか?
[Y] はい(Y) [N] いいえ(N) [S] 中断(S) [?] ヘルプ (既定値は "Y"): y
設定が終わったら、通常のユーザーでPowerCLIを起動しなおしてください。こんな画面になります。
つないでみる
せっかくなので、繋いでみましょう。サーバーへの接続にはConnect-VIServerコマンドレットを利用します。
Connect-VIServer –Server XXXXX –User XXX –Password XXX
テスト証明書で運用している場合は、黄色でこんなメッセージが出ると思いますが、とりあえず無視で。
警告: There were one or more problems with the server certificate:
* The X509 chain could not be built up to the root certificate.
* The certificate’s CN name does not match the passed value.
ホストしているVMの一覧を見てみましょう。コマンドレットはGet-VMです。
PowerCLI > Get-VM
Name PowerState Num CPUs Memory (MB)
—- ———- ——– ———–
VMSERVER1 PoweredOn 1 3072
VMSERVER2 PoweredOn 1 3072
VMSERVER3 PoweredOff 1 3072
VMSERVER4 PoweredOff 1 3072
4台ホストしていて2台稼働中なようです。PowerShellなので、パイプしてフィルタできます。稼働中のVMだけ抜き出すにはこんな感じ。
PowerCLI > Get-VM | Where { $_.PowerState -eq "PoweredOn" }
Name PowerState Num CPUs Memory (MB)
—- ———- ——– ———–
VMSERVER1 PoweredOn 1 3072
VMSERVER2 PoweredOn 1 3072
さらにフィルターしたVMをサスペンドさせたければ、オブジェクトをさらにパイプしてSuspend-VMを実行します。
PowerCLI > Get-VM | Where { $_.PowerState -eq "PoweredOn" } | Suspend-VM -Confirm:$False
Name PowerState Num CPUs Memory (MB)
—- ———- ——– ———–
VMSERVER1 Suspended 1 3072
VMSERVER2 Suspended 1 3072
実行すると、こんな表示が出てタスクの進捗を教えてくれます。
VMから切断するには、Disconnect-VIServerコマンドレットです。
PowerCLI > Disconnect-VIServer –Server XXXX -Confirm:$False
いやー、やっぱりPowerShellは楽でいいですね。VMWareにはPerlのCLIもあるんですが文字列処理をしなくていいのでほんと楽です。PS1ファイルにスクリプトを保存しておけば停電対策もばっちり。
-
2017年5月7日 2:49 午後Windows7 VMware カスタマイズDVD 作成 – Kitchys-factory Blog