仕事でVM-ESX Clientで接続してーとかやっていると、まとめて処理したい!リソース内の現在のイメージの起動状況を一覧で知りたい!などができなくて残念になります。 そんな時、VMware社がリリースしているVM ESXi(vSphere)管理用PowerShellモジュール「PowerCLI」を使えばいい感じに接続ができます。 ということで、今回はPowerCLIのご紹介です。
PowerCLI概要
素敵ですね!
VMware vSphere™ PowerCLI vSphere PowerCLI: Windows PowerShell interface for managing vSphere VMware vSphere PowerCLI is a powerful command-line tool that lets you automate all aspects of vSphere management, including network, storage, VM, guest OS and more. PowerCLI is distributed as a Windows PowerShell snapin, and includes over 370 PowerShell cmdlets for managing and automating vSphere and vCloud, along with documentation and samples.
ダウンロード
ダウンロードは、VMware社ホームページからどうぞ。
VMware vSphere™ PowerCLI vSphere PowerCLI: Windows PowerShell interface for managing vSphere
16/Mar/2013現在の最新バージョンは、5.1.0 Release 2です。 My VMware Accountでログインしていれば、Downloadをクリックすることで無償でダウンロードできます。
インストール
ダウンロードすることで、.exe形式のインストーラが手に入ります。
Step1. インストーラを実行します。
Step2. VMware VIXコンポーネントが必要と言われますが、PowerCLIインストール時に自動的にインストールされます。OKを選択します。
Step3. インストール画面が起動するのでNextを選択
Step4. Nextを選択します。
Step5. Licenseをacceptして、Nextを選択します。
Step6. インストールするコンポーネントを選びNextを選択します。ESXiだけならvSphere PowerCLIのみで問題ありません。
Step7. インストールが始まります。
Step8. インストール完了で!
Step9. ショートカットの生成 I. デスクトップに次の名称でショートアイコンができます。
VMware vSphere PowerCLI (32-Bit) VMware vSphere PowerCLI
II. スタートメニュー | VMware | VMware vSphere PowerCLI フォルダができてユーザーガイドやPowerCLIショートカットができます。
PowerCLI Moduleをインポートする
さて、実はただ単にPowerCLIのショートカットを実行しても起動に失敗します…。 これは、Spaninのインポートをショートカット引数に充ててるのですが、記述が誤っているためです。 また、PowerCLI が PowerShell Consoleでは起動できてもISEでは起動できません。
そこで、PowerISEでPowerCLI Snapinをインポートできないか見てみましょう。 Add-PSSnapinが正常に動作できていません。 また、動作やコマンドレットのインポート自体は、Import-ModuleでのInitialize-powerCLIEnvironment.ps1で完了します。 よって、自作PowerCLI用.ps1に次の行を追加します。
#Add-PSSnapin "C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\vim.psc1" Import-Module "C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Scripts\Initialize-PowerCLIEnvironment.ps1"
これで、PowerShellシェルホスト画面のPS D:\>がPowerCLIに明示され、コマンドレットも利用できるようになります。
vSphereに接続する
さっそく、ConnectVIServerコマンドレットを利用して接続します。
# Connect to VM ESXi Connect-VIServer -Server "IP or DNSname"
するとユーザークレデンシャルが聞かれますので、管理ユーザーでログインします。
vSphereから切断する
Disconnect-VIServerを利用します。
# Disconnect VM ESXi Disconnect-VIServer
vSphereのVMリストを取得する
Get-VMを利用します。
# List VM Get-VM | Format-Table -AutoSize
vSphereのVMリストをResourcePoolでグルーピング
パイプかますだけです。
# Group VM by resourcePool Property $VMResouece = Get-VM | group resourcePool
Resource Poolの一覧取得
コマンドレットでできます。
# List ResourcePool Get-ResourcePool | Format-Table -AutoSize
VMをResource Pool毎に並び替えて取得
単純にResource Poolでsortして、必要なカラムをselectで取得しています。
# Get-VM Sort by ResourcePool Get-VM ` | sort ResourcePool ` | select ResourcePool, Name, PowerState, "Num CPUs", MemoryGB ` | Format-Table -AutoSize
決まったVMを起動する
簡単なファンクションを書いてみました。
function Start-DefaultVM{ [CmdletBinding()] param( $defaultVM = (, ( "VM1", "VM2", "VM3" )) ) begin{ } process{ $defaultVM ` | %{Get-VM -Name $_ } ` | %{Start-VM -VM $_.Name -RunAsync -Confirm} } end{ # Confirm all VM States been stopped if ($null -eq (Get-VM | ? PowerState -eq PoweredON)) { "None of Virtual Machine are running!!" } else { "Now below Virtual Machine are running." Get-VM ` | ? PowerState -eq PoweredON ` | sort ResourcePool ` | select ResourcePool, Name, PowerState, "Num CPUs", MemoryGB ` | Format-Table -AutoSize } } }
これで、functionに定めておいたVMのみ起動します。 また、起動状態も最後にホスト画面にだしてくれます。
Start-DefaultVM
全VMを強制的に停止させる
本来はOSからシャットダウンすべきですが参考程度に 簡単なファンクションを書いてみました。
function Stop-AllVM{ [CmdletBinding()] param( ) begin{ } process{ # Stop All VM Running on with Confirm Get-VM ` | ? PowerState -eq PoweredOn ` | %{Stop-VM -RunAsync $_ -Confirm} } end{ # Confirm all VM States been stopped if ($null -eq (Get-VM | ? PowerState -eq PoweredON)) { "All Virtual Machine has been stopped!!" } else { "Below Virtual Machine are still running." Get-VM ` | ? PowerState -eq PoweredON ` | sort ResourcePool ` | select ResourcePool, Name, PowerState, "Num CPUs", MemoryGB ` | Format-Table -AutoSize } } }
これで、全VMが停止します。
Stop-AllVM
まとめ
vSphere ClientでのGUI管理は便利ですが面倒です……。 是非、VMインスタンスの管理はPowerCLIを使ってPowerShellで自動化しましょう。 定期作業の自動化は、興味があると共に今後も重要な位置を占めていくでしょう…!