2016-07-12 11 views
1

Ich habe 2 verschiedene Arrays und wenn ich sie im Skript auflisten, erscheinen die Spalten des zweiten nicht. Wenn ich sie einzeln aufliste, dann werden sie korrekt aufgelistet.PowerShell Auflistung verschiedener Arrays

Wenn zum Beispiel in einem Skript Auflistung, erhalte ich diese Ausgabe:

Name      ipaddress numofconnections 
----      --------- ---------------- 
SRV1      12.2.2.2    0 
SRV2      11.1.1.1    0 
vServer1            
vServer2              

Wenn ich jedes Array separat aufzulisten, erhalte ich this out:

Array1

Name      ipaddress numofconnections 
----      --------- ---------------- 
SRV1      12.2.2.2    0 
SRV2      11.1.1.1    0 

Array2

name         curstate 
----         -------- 
vServer1       UP  
vServer2       DOWN  
+1

Was ist hier die Frage? –

+1

Ich denke, Sie sollten explizit auswählen, welche bestimmten Spalten Sie sehen möchten. '$ Array1 | Wählen Sie Name, IP-Adresse, Anzahl der Verbindungen für jede Sammlung. Oder 'format-table property1, property2, ...'. – n01d

+0

Wie versuchen Sie gerade, sie aufzulisten? –

Antwort

0

Wenn ich

| Out-String 

zum Beispiel

$array1 | Out-String 
$array2 | Out-String 

zeigt dann 2 separate Tabellen wie im ursprünglichen Post an

+0

Warum die down vote. Es funktionierte! Wie auch immer, ich musste die Tabellen formatieren und die Kopfzeile ändern und folgte diesem Artikel. [link] (https://technet.microsoft.com/en-us/library/ee692794.aspx) Dies sortierte mein ursprüngliches Problem aus und ich brauchte die Out-String nicht – mattnicola

0

Ich nehme an, PowerShell nimmt das erste Objekt im Array und zeigt dessen Eigenschaften an. Wenn ein anderes Objekt in der Liste mehr Eigenschaften hat, wird es nicht angezeigt. Sie können jedoch über die Elemente durchlaufen und Ihre Spalten auswählen:

$array1, $array2 | Foreach { $_ | select Name, ipaddress, curstate } 

Ausgang:

Name  ipaddress curstate 
----  --------- -------- 
SRV1  12.2.2.2   
SRV2  12.1.1.1   
vServer1   UP  
vServer2   DOWN  
0

PowerShell kann den Übergang zwischen dem ersten und dem zweiten Array nicht erkennen, es sieht nur eine fortlaufende Reihe von Objekten, die an die Pipeline ausgegeben werden.

Sie sind wahrscheinlich so etwas wie dies zu tun:

$array1 = Get-Something 
$array2 = Get-SomeOtherThings 

$array1 # send to the pipeline 
$array2 # send to the pipeline (in this case it will append to the pipeline) 

Wenn dies geschieht, wird Powershell versuchen, eine gültige Anzeige für die Objekte zu schaffen, und in diesem Fall wählen ein Format-Table-Layout. Dies wird durch Betrachten des ersten empfangenen Objekts und Zählen der Anzahl der anzuzeigenden Eigenschaften bestimmt. Sobald das Anzeigeformat gewählt ist, wird dasselbe Format für alle Objekte in der Pipeline verwendet.

Wenn Sie zwei verschiedene Tabellen anzeigen möchten, müssen Sie der PowerShell mitteilen, dass zwischen den beiden Serien eine Pause besteht.

Deshalb funktioniert die answer by @mattnicola, weil es die Pipeline in zwei Teile aufteilt.

Wenn Sie die volle Kontrolle über die Anzeige wan't, dann können Sie dies auch tun:

$array1 | Format-Table # causes the items in the pipeline being written to console in table layout (no items are emitted to the pipeline after this) 

$array2 | Format-Table # causes a new table to be written to the console.