2017-01-03 5 views
2

Betrachten Sie diese 2 HashtablesHashtable Ausgabespaltentitel

$myHash1 = @{one=1;two=2;three=3;four=4;five=5} 
$myHash2 = @{six=6;seven=7;eight=8;nine=9;ten=10} 

Wie Sie sehen können, sie jeweils einen Spaltentitel erhalten, wenn auf dem Bildschirm angezeigt.

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 

Wenn ich jedoch beide in 1 Befehl ausgab, werden die Spaltentitel nur einmal angezeigt.

Auch wenn ich eine Trennlinie hinzufüge, werden die Spaltentitel immer nur einmal angezeigt.

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 

Warum ist das?
Und gibt es eine Möglichkeit, die Spaltentitel wieder auf der Ausgabe von myHash2 angezeigt werden?
So etwas wie dies

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 

Antwort

0

Der Grund warum die Spaltentitel in der Ausgabe von myHash2 erklärt in weggelassen this post

Zusammenfassung:

Wenn jetzt keine registrierte Ansicht für einen Datentyp vorhanden ist, sucht Out-Default nach dem ERSTEN OBJEKT IN DEM STREAM, um zu bestimmen, wie viele Eigenschaften das Objekt 5 oder mehr Eigenschaften hat, sonst sendet es den GESAMTEN STREAM an die Format-Liste Es sendet den ENTREIHEN STREAM an die Format-Tabelle. Wenn der Befehl den Datenstrom an Format-Table sendet, muss dieser Befehl Spalten generieren. Es tut dies, indem es auf die Eigenschaften des ERSTEN OBJEKTS schaut - jene werden die Spalten. Wenn das erste Objekt 2 Eigenschaften hat, erhalten Sie eine 2-Spalten-Tabelle, selbst wenn alle anderen Objekte im Stream 10 Eigenschaften haben.

Der Kommentar auf diesem Posten, hergestellt von Ansgar-Wiechers am 10. Januar um 21:28 Uhr schließt die Antwort:

Was relevant ist, ist nicht nur die Anzahl der Spalten, aber ihre Titel auch. $myArray wird als Tabelle mit 2 Spalten key und val angezeigt, während $myArray.GetType() die Tabellenausgabe mit 4 Spalten IsPublic, IsSerial, Name und BaseType anzeigen würde. Da keine der letzteren Spalten den Titel key oder val hat, wird keiner von ihnen angezeigt.

1

diese Ihnen helfen sollen:

$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

Ich zweite Abhijith. Das funktioniert gut. '$ myHash1 | Ft; $ myHash2 | ft' –

+1

Ich würde Out-String (wie im Kommentar erwähnt) anstelle von Format-Tabelle empfehlen. Sie können zumindest einige der Daten aus der Out-Zeichenfolge zurückholen, wenn Sie müssen, aber die Ausgabe der Format-Tabelle ist undurchsichtig. –

+1

Weiß jemand, warum die Spaltenüberschriften für die 2. Anweisung weggelassen werden? –