h41msh1c0r
Goto Top

Powershell Jobs Parallel Ergebnis in DataTable mag bei GUI nicht ohne gehts

Servus,

folgendes geht im Trockentest:

$servers =  @('ServerA','ServerB','ServerC','ServerD','ServerE' )  

foreach ($server in $servers) {
    $running = @(Get-Job | Where-Object { $_.State -eq 'Running' })  
    if ($running.Count -ge 2) {
        $running | Wait-Job -Any | Out-Null
    }

    Write-Host "Starting job for $server"  
    Start-Job {
        Param($server) 
        $PxeS   = Invoke-Command -ComputerName $using:server -ScriptBlock { Get-Service -DisplayName "Service1" -ErrorAction SilentlyContinue  }   
        $CoreS  = Invoke-Command -ComputerName $using:server -ScriptBlock { Get-Service -DisplayName "Service2" -ErrorAction SilentlyContinue }   
       
        New-Object PSObject -Property @{ Servername=$using:server ; PxeS=$($PxeS).Status;CoreS=$($CoreS).Status }
    } 
}

Wait-Job * | Out-Null

foreach($job in Get-Job)
{
    $result = Receive-Job $job
    Write-Host $result.Servername 'PXE: ' $result.PxeS   'CoreS: ' $result.CoreS  
}

Remove-Job -State Completed

Die Jobs rennen auch wunderbar parallel los und er liefert mir zu den Diensten auch die Werte.

Jetzt habe ich den obrigen Block versucht zu erweitern um das hinzufügen in eine DataTable.

$result = Receive-Job $job
           
    $row = ($result.Servername,
         $result.CoreS,
         $result.PxeS,)

    Write-Host $result.Servername 'PXE: ' $result.PxeS   'CoreS: ' $result.CoreS  

    $global:table.Rows.Add($row)

    $dataGridView.Update()


Die Table ist an ein DGV gebunden und er gibt mir immer nur die Werte vom Ersten Job aus.
Bei 5 Servern bekomme ich so nur ServerA und dann 4 leere Zeilen.
Selbst das write-host gibt bei der Variante nichts aus.
Nutze ich den reinen Trockentest bekomme ich in der Console von allen Servern auch den Status der Dienste ausgegeben.

;( ?

Hat einer eine Idee?

Irgendwas falsch beim Zusammenbauen der $row?

VG


EDIT:
Übeltäter gefunden

Remove-Job -State Completed

Nachdem die Ergebnisse vom ersten Job abgearbeitet wurden kam das Cmdlet zu früh und räumte alle anderen Jobs ab. =)

Content-Key: 348891

Url: https://administrator.de/contentid/348891

Printed on: April 24, 2024 at 06:04 o'clock