web-dev-qa-db-ja.com

Format-Tableを使用して列幅を制御する

一部のPCの最後の再起動時間をリストから取得しようとしています。使用するとき

foreach ($pc in $pclist) {
  Get-CimInstance -ClassName win32_operatingsystem -ComputerName $pc |
    select csname, lastbootuptime 
}

出力は次のようになります。

csname lastbootuptime 
 ------ -------------- 
 CONFA7-L1-1A 7/15/2016 9:55:16 AM 
 CONFA7-L1-1F 5/31/2016 8:51:46 AM 
 CONFA7-L1-1G 6/18/2016 11:09:15 AM 
 CONFA7-L1 .. 。6/26/2016 5:31:31 PM 
 CONFA7-L3 ... 7/24/2016 3:48:43 PM

これはすてきですが、PC名が長い場合、フルネームを見ることができません。パイプラインでFormat-Table

Get-CimInstance -ClassName win32_operatingsystem -ComputerName $pc |
  select csname, lastbootuptime |
  Format-Table  -HideTableHeaders 

そして、これは私が得るものです:

CONFA7-L1-1A 2016年7月15日9:55:16 AM 
 
 
 
 CONFA7-L1-1E 7/21/2016 12:58: 16 PM 
 
 
 
 CONFA7-L1-1F 5/31/2016 8:51:46 AM

ここには2つの問題があります。

  1. 見出しはありません。 -HideTableHeadersを削除すると、必要のないすべての出力の見出しが表示されます。

  2. 間に多くの空白があります。

基本的には、最初のものと同様の出力を取得する必要がありますが、フルネームを切り捨てることはありません。これらを修正するにはどうすればよいですか?

12
screenslaver

特定の長さを超えてデータをトリムし、列幅を手動で指定する場合は、各プロパティ属性にWidthプロパティを渡すことができます。

たとえば、データを次のようにしたい場合:

Column 1    Column 2      Column 3      Column 4
--------    --------      --------      --------
Data        Lorem ip...   Lorem ip...   Important data

基本的なFormat-Table構文、明示的なプロパティのリスト:

$data | Format-Table -Property Col1, Col2, Col3, Col4 -AutoSize

プロパティ名を渡すだけでなく、 追加のメタデータをProperty に追加できます。

$a = @{Expression={$_.Col1}; Label="Column 1"; Width=30}, 
     @{Expression={$_.Col2}; Label="Column 2"; Width=30}, 
     @{Expression={$_.Col3}; Label="Column 3"; Width=30}, 
     @{Expression={$_.Col4}; Label="Column 4"; Width=30}
$data | Format-Table -Property $a

:これはmklement0のより完全な答えの一番下で説明されていますが、これがあなたのユースケースであり、素早くスクロールしている場合、私は願っていますこれは、この戦略をハイレベルで強調するのに役立ちます

7
KyleMit