Format-Tableで右揃えとか三項演算子的なこと
chromeのプロセス一覧見てみよ~(ドヤ顔
な・ん・だ・と!?
すっからかんだと!?
てか、なんだこの空行は!?
右にスクロールしてみる
出てきた~!
画面のプロパティを見てみると・・・
そうです。
画面バッファーのサイズを広げてました。
Format-Tableコマンドレット
まぁ右スクロールすれば出てくるからいいけど、見難い!
ということでFormat-Table(以下ft)-AutoSizeをカマしてみる
PS C:\Users> gps chrome | ft -a id,name Id Name -- ---- 1304 chrome 1328 chrome 1744 chrome 1868 chrome 2776 chrome 3252 chrome 4392 chrome 5172 chrome 5224 chrome 5372 chrome 5648 chrome 6204 chrome 6284 chrome 6556 chrome 6844 chrome 6992 chrome 7096 chrome 7156 chrome 8304 chrome 9408 chrome PS C:\Users>
いい感じに自動的に幅を調整してくれます。
右揃えや中央揃え
このft、色々と出来ちゃいます。
いろいろな表示サンプル
PS C:\Windows\system32> gps chrome | ft -a Id, Name, VirtualMemorySize64, # 仮想メモリをMB変換して小数点第二位で表示 @{n="VM[MB]"; e={"{0:N2}" -F ($_.VirtualMemorySize64/1MB)}}, # 仮想メモリピーク値をMB変換して小数点第二位で右揃え @{n="PeakVM[MB]"; e={"{0:N2}" -F ($_.PeakVirtualMemorySize64/1MB)}; a="r"}, # 仮想メモリが1GB以上の行にY、それ以外Nでセンタリング @{n="Over 1GB#if"; e={if($_.VirtualMemorySize64 -ge 1GB){"Y"}else{"N"}}; a="c"}, @{n="Over 1GB#map"; e={@{$true="Y";$false="N"}[$_.VirtualMemorySize64 -ge 1GB]}; a="l"}, @{n="Over 1GB#array"; e={@("Y","N")[-not( $_.VirtualMemorySize64 -ge 1GB)]}; a="r"} Id Name VirtualMemorySize64 VM[MB] PeakVM[MB] Over 1GB#if Over 1GB#map Over 1GB#array -- ---- ------------------- ------ ---------- ----------- ------------ -------------- 1124 chrome 865202176 825.12 829.12 N N N 1424 chrome 1181487104 1,126.75 1,143.75 Y Y Y 2116 chrome 957128704 912.79 916.79 N N N 4788 chrome 913203200 870.90 871.90 N N N 4912 chrome 950034432 906.02 916.02 N N N 8496 chrome 995819520 949.69 955.96 N N N 8588 chrome 311062528 296.65 307.28 N N N 8712 chrome 1492869120 1,423.71 1,466.71 Y Y Y 8756 chrome 897290240 855.72 858.72 N N N 8792 chrome 776208384 740.25 745.25 N N N 8800 chrome 801337344 764.21 771.22 N N N 8808 chrome 862097408 822.16 862.30 N N N 8820 chrome 774639616 738.75 743.75 N N N 8832 chrome 778833920 742.75 748.75 N N N 8840 chrome 770445312 734.75 741.75 N N N 8848 chrome 775159808 739.25 746.25 N N N 8856 chrome 770445312 734.75 741.75 N N N 8864 chrome 771493888 735.75 743.75 N N N 8872 chrome 769658880 734.00 739.00 N N N 8912 chrome 998236160 951.99 979.99 N N N 9660 chrome 1066119168 1,016.73 1,025.73 N N N 9664 chrome 914006016 871.66 876.66 N N N 10192 chrome 1044418560 996.04 1,012.54 N N N
三項演算子(VBでいうIIF)的な何か
前述のサンプル。
実は三項演算子的なことしてます。
お気づき?
列「Over 1GB#map」と「Over 1GB#array」は条件が真と偽で表示内容を変えてます。
仕組みは単純。
@{$true="Y";$false="N"}[$_.VirtualMemorySize64 -ge 1GB]
$trueは"Y"、$falseは"N"という連想配列を作って、真偽値を使って連想配列から値をゲットしているだけ。
VBで書くならこんな感じでしょうか
Dim map As New Hashmap() map.add(true, "Y") map.add(false, "N") # map.item(true)
@("Y","N")[-not( $_.VirtualMemorySize64 -ge 1GB)]
こっちはbool値をint型に変換して(暗黙的でよろしくはないが)、インデックスとして利用。