2017-01-03 7 views
2

Рассмотрим эти 2 HashTablesHashtable выходные заголовки столбцов

$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

Причина почему заголовки столбцов опущены на выходе myHash2 объясняется в this post

Резюме:

Теперь, если нет зарегистрированного вида для типа данных, Out-Default смотрит на ПЕРВЫЙ ОБЪЕКТ В СТРИМЕ, чтобы определить, сколько свойств у объекта имеет 5 или более свойств, он отправляет ENTIRE STREAM в Format-List, иначе он отправляет ENTIRE STREAM в формат-таблицу. Когда он отправляет поток в формат-таблицу, эта команда должна генерировать столбцы. Он делает это, просматривая свойства FIRST OBJECT - те, которые становятся столбцами. Если первый объект имеет 2 свойства, вы получите таблицу с двумя столбцами, даже если все остальные объекты в потоке имеют 10 свойств.

Комментарий на этом посту, сделанные Ansgar-Wiechers на 10 января в 21:28 завершает ответ:

Что актуальным является не только количество столбцов, но и их название. $myArray отображается в виде таблицы с 2 колонками key и val, тогда как $myArray.GetType() будет отображать табличный вывод с 4 колонками IsPublic, IsSerial, Name и BaseType. Поскольку ни один из последних столбцов не имеет названия key или val, ни один из них не отображается.

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 
+0

I второй абхиджит. Это хорошо работает. '$ myHash1 | Ft; $ myHash2 | ft' –

+1

Я бы рекомендовал использовать Out-String (как указано в комментарии) вместо таблицы формата. Вы можете, по крайней мере, получить некоторые данные из out-string, если вам нужно, но вывод в формате таблицы непрозрачен. –

+1

Кто-нибудь знает ** почему ** названия столбцов опущены для второго утверждения? –

Смежные вопросы