Hashtable输出列标题

时间:2017-01-03 13:18:33

标签: powershell

考虑这两个哈希表

$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

2 个答案:

答案 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个列keyval的表格,而$myArray.GetType()将显示包含4列IsPublicIsSerial的表格输出, NameBaseType。由于后面的列都没有标题keyval,因此不显示任何一个。