2015年1月6日火曜日

PowerCLIのTips集 (随時追加)

VMwareのAPIをPowerShellベースのスクリプトで叩くことができるPowerCLI。運用自動化を行う上では必須ツールとなる。

PowerCLIのTipsを取り留めなく書いていく。なお、バージョンは5.1以降を推奨。

ESX設定確認系コマンド

# ESX時刻確認
# Get-EsxCliを使うとDCUIのesxcliコマンドと同じことができる
# システムクロック
Get-VMHost | select Name,{($_ | Get-EsxCli).system.time.get()}
# ハードウェアクロック
Get-VMHost | select Name,{($_ | Get-EsxCli).hardware.time.get()}

# ESXサーバ物理NIC帯域の確認コマンド
Get-VMHostNetworkAdapter -VMHost *  | ft -AutoSize VMHost,Name,BitRatePerSec



仮想マシン設定確認系コマンド

# 仮想マシンのNIC一覧&MACアドレス取得
Get-VM | Get-NetworkAdapter | ft Parent,Name,Type,NetworkName,MacAddress

# 仮想OSのCDドライブ状況
# CDドライブがマウントされていたりするとvMotionができない場合があるので事前確認する
Get-VM | Get-cddrive | select parent,isopath,hostdrive

# スナップショット有無の確認コマンド
# スナップショットの消し忘れ確認などに便利
Get-Snapshot -vm * | ft -AutoSize VM,Name

# VMwareToolsのバージョン確認
# 元ネタ: http://blog.jgriffiths.org/?p=534
get-vm | % { get-view $_.id } | select Name, @{ Name="ToolsVersion"; Expression={$_.config.tools.toolsVersion}},@{ Name="ToolStatus"; Expression={$_.Guest.ToolsVersionStatus}}

# 仮想マシンのディスク使用量取得
# 割り当てディスク量ではなく、仮想OSの使用量がわかる
ForEach ($VM in Get-VM ){($VM.Extensiondata.Guest.Disk | Select @{N="Name";E={$VM.Name}},DiskPath, @{N="Capacity(MB)";E={[math]::Round($_.Capacity/ 1MB)}}, @{N="Free Space(MB)";E={[math]::Round($_.FreeSpace / 1MB)}}, @{N="Free Space %";E={[math]::Round(((100* ($_.FreeSpace))/ ($_.Capacity)),0)}} | ft -autosize)}

移動系コマンド

# 「検出された仮想マシン」フォルダから出す(全VMが対象)
get-vm | Move-Inventory -Destination "vm"

# 「検出された仮想マシン」フォルダへ全VMを入れる
get-vm | Move-Inventory -Destination "検出された仮想マシン"

# 仮想マシンのフォルダ情報確認
get-vm | ft name,folder

# 仮想OSのStorage vMotion
Move-VM -VM "TEST_VM" -Datastore "DataStoreA" -DiskStorageFormat "Thin"