皆さまこんにちは。TAM の大西です。
平素より弊社製品をご利用いただきありがとうございます。
PowerCLI は弊社製品の基本的な運用ツールですが、PowerCLI をご利用いただくまで PowerShell に触れたことがなく、操作に慣れないといったお客様もいらっしゃるのではないでしょうか。
本ブログでは PowerCLI での情報収集や操作に役立つ Tips についていくつかご紹介させていただきます。
PowerCLI の導入についてはこちらのブログをご参照ください。
■目次
- 情報の整形・抽出・出力に関する Tips
- オブジェクトから取得可能な情報一覧を確認する
- 必要なプロパティのみ選択して表示する
- プロパティ名を任意の名前に変更して表示する
- 条件を使って出力結果をフィルタして表示する
- プロパティ値のみ表示する
- CSVファイルに出力する
- 複数のオブジェクトで同じ操作を繰り返す
- 条件分岐を行う
- 参考情報
- 最後に
■情報の整形・抽出・出力に関する Tips
今回は Get-VM というコマンドの出力結果を例にご説明します。
特にオプションなどを指定しない場合、接続している vCenter の管理下にある仮想マシンの一覧を下記のように出力します。仮想マシン名の他いくつかのプロパティが表示されます。
※紙面の関係で出力を一部省略しておりますが、ご了承ください。
オブジェクトから取得可能な情報一覧を確認する
- Get-Member で対象オブジェクトから取得可能なプロパティ・メソッドの一覧を得ます。
- メソッドが不要な場合 -MemberType Properties オプションを付与します。
- Get-Member のエイリアス “gm” でも同様の結果を得ます。
Get-VM | Get-Member -MemberType Properties
必要なプロパティのみ選択して表示する
- 取得したいプロパティを | Select の後にカンマ区切りで列記します。
Get-VM | Select Name, VMHost
プロパティ名を任意の名前に変更して表示する
- プロパティ名が長い、分かりづらい場合など、@{N=’任意の名前’; E={$_.変更前のプロパティ名}} とします。
Get-VM | Select Name, @{N=”ESXi; E={$_.VMHost}}
条件を使って出力結果をフィルタして表示する
- 以下いくつかのフィルタパターンを示します。
- Where-Object のエイリアス “?” でも同等の結果を得ます。
文字列の完全一致
Get-VM | Where-Object {$_.Name -eq “web-01a”} | Select Name, VMHost
文字列の部分一致
Get-VM | Where-Object {$_.Name -like “web-0*”} | Select Name, VMHost
文字列の部分一致(否定)
Get-VM | Where-Object {$_.VMHost.Name -notlike “esxi-1*.vcf.sddc.lab”} | select Name, VMHost
bool値の指定($true あるいは $false)
Get-VM | Where-Object {$_.MemoryHotAddEnabled -eq $true} | select Name, VMHost
数値の閾値を指定(以上、以下、超過、未満など)
Get-VM | Where-Object {$_.NumCPU -ge 4}
フィルタ条件を複数指定
Get-VM | Where-Object {$_.NumCPU -ge 4 -and $_.MemoryGB -eq 8.0}
※比較演算子については後述のリンクを参照のこと
プロパティ値のみ表示する
- カラム部分を出力したくない場合などは (コマンド全体).”プロパティ名” とします。
(Get-VM | Where-Object {$_.Name -like “web*”}).Name
CSVファイルに出力する
- 出力結果を指定のパスに保存します。
Get-VM | Select Name, VMHost | Export-Csv -Path C:\Users\Administrator\VMs.csv
複数のオブジェクトで同じ操作を繰り返す
条件分岐を行う
- 一つのコマンドで複数のオブジェクトに対する操作を行います。
- ここでは「起動中の仮想マシンは再起動、停止中のものは起動」という操作を行っています。
- このように複数のオブジェクトに対する操作は特に十分な動作検証を行った上で本番運用いただくようお願いします。
$vms = Get-VM | ? {$_.Name -notlike “vCLS*”}
foreach ($vm in $vms){
>> if ($vm.PowerState -eq “PoweredOn”){
>> Restart-VM-VM $vm -Confirm:$false
>>> } elseif ($vm.PowerState -eq “PoweredOff”){
>> Start-VM-VM $vm-Confirm:$false
>> }
>> }
■参考情報
■最後に
PowerCLI での作業の自動化や効率化などでご相談事項がございましたら、担当TAMまでご相談ください。