21

我正在尝试从列表中获取某些 PC 的最后重新启动时间。当我使用

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

输出如下。

csname 上次启动时间
------ --------------
CONFA7-L1-1A 2016 年 7 月 15 日上午 9:55:16
CONFA7-L1-1F 2016 年 5 月 31 日上午 8 点 51 分 46 秒
CONFA7-L1-1G 2016 年 6 月 18 日上午 11:09:15
CONFA7-L1... 2016 年 6 月 26 日下午 5:31:31
CONFA7-L3... 2016 年 7 月 24 日下午 3:48:43

这很整洁,但是如果 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



CONFA7-L1-1E 2016 年 7 月 21 日下午 12:58:16



CONFA7-L1-1F 2016 年 5 月 31 日上午 8 点 51 分 46 秒

这里有两个问题。

  1. 没有标题。如果我删除-HideTableHeaders,每个不需要的输出都会有标题。

  2. 中间有很多空白。

基本上我只需要得到一个类似于第一个的输出,但不截断全名。我该如何解决这些问题?

4

2 回答 2

42
于 2016-07-25T19:59:17.193 回答
17

If you want trim data past a certain length and manually specify column widths, you can pass a Width property for each property attribute.

For example, if you wanted your data to look like this:

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

Here's the basic Format-Table syntax, with a list of explicit properties:

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

Instead of just passing in the property names, we can add some additional metadata to 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

Note: I realize this is covered at the bottom of mklement0's more complete answer, but if this is your use case and you're scrolling quickly, I hope this helps highlight this strategy at a high level

于 2018-09-04T21:56:43.983 回答