考虑这两个哈希表
$myHash1 = @{one=1;two=2;three=3;four=4;five=5}
$myHash2 = @{six=6;seven=7;eight=8;nine=9;ten=10}
正如您所看到的,他们每个人都会在屏幕上显示一个列标题。
PS C:\> $myHash1
Name Value
---- -----
four 4
five 5
one 1
three 3
two 2
PS C:\> $myHash2
Name Value
---- -----
six 6
nine 9
seven 7
ten 10
eight 8
但是,当我在1个命令中输出它们时,列标题只显示一次。
PS C:\> $myHash1;$myHash2
Name Value
---- -----
four 4
five 5
one 1
three 3
two 2
six 6
nine 9
seven 7
ten 10
eight 8
即使添加分隔线,列标题仍然只显示一次。
PS C:\> $myHash1;Write-Output 'separator line';$myHash2
Name Value
---- -----
four 4
five 5
one 1
three 3
two 2
separator line
six 6
nine 9
seven 7
ten 10
eight 8
为什么?
有没有办法让myHash2的输出再次显示列标题?
像这样的东西
Name Value
---- -----
four 4
five 5
one 1
three 3
two 2
separator line
Name Value
---- -----
six 6
nine 9
seven 7
ten 10
eight 8
答案 0 :(得分:1)
这应该可以帮到你:
$myHash1 = @{one=1;two=2;three=3;four=4;five=5}
$myHash2 = @{six=6;seven=7;eight=8;nine=9;ten=10}
#you can also use $myHash1 | Out-String also
$myHash1 | ft
Write-Output "separator"
$myHash2 | ft
答案 1 :(得分:0)
myHash2的输出中省略了为什么列标题的原因在this post
中进行了解释要点:
现在,如果没有数据类型的注册视图,则Out-Default会查看STREAM中的FIRST OBJECT以确定该对象有5个或更多属性的属性数,它将整个STREAM发送到Format-List ,否则它将整个STREAM发送到Format-Table。当它将流发送到Format-Table时,该命令需要生成列。 通过查看FIRST OBJECT的属性来实现这一点 - 这些属于列。如果第一个Object有2个属性,即使流中的所有其他对象都有10个属性,您也会得到一个2列表。
Ansgar-Wiechers于1月10日21:28发表的评论完成了答案:
相关的不仅仅是列数,还有它们的标题。
$myArray
显示为包含2个列key
和val
的表格,而$myArray.GetType()
将显示包含4列IsPublic
,IsSerial
的表格输出,Name
和BaseType
。由于后面的列都没有标题key
或val
,因此不显示任何一个。