2016-09-29 3 views
0

Das Ziel besteht darin, ein Skript auszuführen, das PowerShell-Remoting auf eine Liste von Hosts prüft. Ich möchte, dass der Status jedes Jobs in einer einzigen Zeile und nicht in separaten Zeilen in Host und Status angezeigt wird. Ich würde gerne sehen:Wie kann ich die Ausgabezeile als String- oder Objektfelder formatieren?

server1 Completed 
server2 Completed 
server3 Failed 
server4 Completed

Ich versuchte {"$_.Location, $_.State"} als letzte Zeile mit, aber das scheint die Typen statt Werte zu emittieren.

Muss ich ein New-Object erstellen, um diese zwei Felder zu enthalten, um auszugeben?

Ja, es ist Overkill zu verwenden-AsJob auf so eine kleine Anfrage. Das nächste Ziel ist es, etwas zu bauen, das lang laufende Jobs startet.

Haben Sie Vorschläge zum Formatieren der Ausgabe? Oder über irgendetwas anderes hier, das nicht PowerShell-ic ist.

$server_list = @(
    'server1' 
    ,'server2' 
    ,'server3' 
    ,'server4' 
) 

$outfile = ".\get-psversions.csv" 

$server_list | 
    ForEach-Object { 
     $thishost = $_ 

     Try { 
      $current_host = $_ 
      $v = Invoke-Command -ComputerName $current_host {$PSVersionTable.PSVersion} -ErrorAction Stop -AsJob 
     } 
     Catch 
     { 
      $v = New-Object -TypeName "System.Version" 
      $v | Add-Member -MemberType NoteProperty -Name PSComputerName -Value "$thishost connect failed" 
     } 
     $v 
    } 
Get-Job | Wait-Job | ForEach-Object {$_.Location, $_.State} 
PS X:\Scripts\PSAutomation> .\get-v2.ps1 

Id  Name  PSJobTypeName State  HasMoreData Location  Command 
--  ----  ------------- -----  ----------- --------  ------- 
390 Job390 RemoteJob  Running True   server1  $PSVersionTable.PSVersion 
392 Job392 RemoteJob  Running True   server2  $PSVersionTable.PSVersion 
394 Job394 RemoteJob  Running True   server3  $PSVersionTable.PSVersion 
396 Job396 RemoteJob  Running True   server4  $PSVersionTable.PSVersion 
server1 
Completed 
server2 
Completed 
server3 
Failed 
server4 
Completed

Antwort

0

Für Eigenschaften von Objekten der Auswahl verwenden Select-Object:

Get-Job | Wait-Job | Select-Object Location, State 

Rohr des Ergebnisses in Format-Table wenn Sie brauchen tabellarische Ausgabe (standardmäßig werden bis zu 4 Eigenschaften in Tabula angezeigt) r form, wenn die Anzahl der angezeigten Eigenschaften darüber hinausgeht, dass PowerShell in Listenform umschaltet).

Get-Job | Wait-Job | Select-Object Location, State | Format-Table -AutoSize 

Natürlich können Sie auch die format operator verwenden, wenn Sie Ausgabestrings mit einem bestimmten Format benötigen:

Get-Job | Wait-Job | ForEach-Object { "{0}:`t{1}" -f $_.Location, $_.State } 
+0

Vielen Dank. Dies erklärt mehrere Dinge. – lit

0

Code ändern zu einem ForEach-Object wie:

ForEach-Object {"$($_.Location) $($_.State)"} 
+0

Vielen Dank, @Kory Gill. Dies ist ähnlich wie "Befehlsersetzung" in * nix-Shells. – lit

+0

@Liturgist In PowerShell heißt es [Teilausdruck] (https://technet.microsoft.com/en-us/library/hh847732.aspx), aber im Wesentlichen ist es das Gleiche. –

Verwandte Themen