(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Windows/Powershell】Where-Objectを利用する際はAutoSizeをOFFにする

スポンサーリンク

事象

Powershellにて検索をかける際に使うWhere-Objectにて項目が取得できない。

Where-Object {$_.Name -eq "Cpu.Quantum"}

具体的には以下コマンドで何も表示されない。

PS > Get-VMHost | Get-AdvancedSetting | ft -AutoSize | Where-Object {$_.Name -eq "Cpu.Quantum"}
環境情報
PSVersion : 5.1

原因

表示列のフォーマットを調整するft -AutoSizeが不要。

同コマンドが入ったパイプ部分を削除すると値が取得できるGet-AdvancedSettingは

PS > Get-VMHost | Get-AdvancedSetting  | Where-Object {$_.Name -eq "Cpu.Quantum"}

Name                 Value                Type                 Description
----                 -----                ----                 -----------
Cpu.Quantum          200                  VMHost

以下、補足です。

補足

例えばPowerCLIにてESXiの詳細パラメータを取得するGet-AdvancedSettingはデフォルトで利用すると以下のように左詰めに値が入り、長い場合は値が潰れて読めません。

...
UserVars.ProductL... /locker/packages/... VMHost
Net.vNicNumDeferr... 12                          VMHost
...

よって事象に記載した通りAutoSizeを入れることで

PS > Get-VMHost | Get-AdvancedSetting | ft -AutoSize 

以下のように列の幅が変更されることで値がすべて表示されます。

...
UserVars.ProductLLockerLocation      /locker/packages/vmtoolsRepo/
Net.vNicNumDeferredReset               12  
...

ただし、「Where-Object」で絞る際はどう設定を入れると値がヒットしないので結果が空になります。
このあたりは出力をすべて文字列として扱うUNIXとの差異なので同コマンドを使う場合はこの仕様を認識しておく必要があります。

以上、ご参考になれば幸いです。