我正在尝试从列表中获取某些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
Which is neat, but if the PC name is long, I am unable to see the full name.
So I pipelined Format-Table
:
Get-CimInstance -ClassName win32_operatingsystem -ComputerName $pc |
select csname, lastbootuptime |
Format-Table -HideTableHeaders
-HideTableHeaders
,那么每个输出的标题都是不必要的。 最佳答案
总结和补充PetSerAl和Ansgar Wiechers的有用评论:
tl;博士
Get-CimInstance -ClassName win32_operatingsystem -ComputerName $pclist |
Sort-Object CSName |
Format-Table CSName, LastBootUpTime -AutoSize
-AutoSize
是确保CSName
(计算机名称)列与一样宽的功能,以便完整显示所有值。Get-CimInstance
采用计算机名称数组,因此不需要循环。但是,由于并行查询目标计算机,因此返回的对象顺序通常将与计算机名称的输入顺序不匹配-这可以通过Sort-Object CSName
调用来纠正。# Instead of a simple property name, 'prop1', pass a *hashtable*
# (@{ ... }`) with a 'width' entry to Format-Table
PS> [pscustomobject] @{ prop1='1234567890'; prop2='other' } |
Format-Table -Property @{ e='prop1'; width = 5 }, prop2
prop1 prop2
----- -----
1234… other
注意:在Windows PowerShell中,您只会看到12...
作为截断值,因为它使用3个单独的.
字符来表示截断。在PowerShell [Core] 6+中,此功能已改进为使用单个字符…
(水平椭圆, U+2026
)。Format-Table
cmdlet进行表格输出,而不是Select-Object
:Select-Object
的目的是创建自定义对象,而不是设置输出格式。如果此类对象(通常是没有预定义格式 View 的任何类型的实例)碰巧具有4个或更少的属性,则默认情况下会使用Format-Table
格式化它们(但您不必应用选项);否则,将隐式使用Format-List
。谢谢PetSerAl。Format-Table
始终将输出行限制为可用的屏幕宽度,这意味着:...
指示(尽管请注意,所有打印的列都可以截断值)。Format-Table
的输出通过管道传递到| Out-File -Width <int>
或| Out-String -Stream -Width <int>
;请注意,如果您将后者打印到屏幕上,则会换行(但是多余的换行符不会成为数据的一部分)。-Width ([int]::MaxValue)
,因为带有格式设置数据的类型的表格式数据无条件地用全角空格填充,这会消耗输出文件中过多的内存/空间,您可能甚至耗尽内存。在PowerShell Core中,此问题已在v6.1或更高版本中修复。[console]::BufferWidth = <column-count>
扩大屏幕缓冲区,以允许较长的行不换行,但需要水平滚动。-AutoSize
...告诉Format-Table
根据需要使列尽可能宽以适合所有数据值,但是请注意,这可能会导致显示更少(通常更少:更多)的列。-Wrap
...如果需要,使打印的最后一列的值跨多行,以避免被截断。Width
属性作为参数-calculated property称为Format-Table
的-Property
参数;例如,以下示例将第一个输出列限制为5个字符: [pscustomobject] @{ prop1='1234567890'; prop2='other' } |
Format-Table -Property @{ e='prop1'; width = 5 }, prop2
...
/ …
始终占据截断值的后3个字符(在Windows PowerShell中)/仅占最后一个字符(在PowerShell [Core] 6中) +);在上面的示例中,prop1
值呈现为12...
/ 1234…
,总共5个字符。alignment = 'right'
条目将列更改为右对齐(默认为'left'
,'center'
是第三个选项;这两个截断值的末尾)。{ ... }
(e
)条目的脚本块(expression
)中使用自定义表达式:[pscustomobject] @{ prop1='1234567890'; prop2='other' } |
Format-Table -Property @{
n='prop1'; e={ $_.prop1 -replace '^.+(.{4})$', '…$1'}; width = 5
}, prop2
-Property
参数中输出,即使是不需要自定义宽度的属性。https://stackoverflow.com/questions/38554966/