Hallo zusammen,
ich stehe vor der Herausforderung ein Script zur Abfrage von Servern zu erweitern. Dafür möchte ich das erst etwas effizienter gestalten, bevor ich neue Funktionen hinzufüge. Dabei bin ich auf ein Phänomen gestoßen, das ich auch in einem wesentlich kleineren Script nachvollziehen, aber nicht lösen kann. Der Code:
#Kommandos, die ausgeführt werden sollen $Cmds = @( [pscustomobject]@{Nummer = '1' ;Cmd = {Get-Date -Format 'yyyy-MM-dd HH:mm:ss.fff'};Result = ''} [pscustomobject]@{Nummer = '2' ;Cmd = {Get-Date -Format 'yyyy-MM-dd HH:mm:ss.fff'};Result = ''} ) #Platzhalter, der im Original für die abzufragenden Server steht $Versuche = @( [pscustomobject]@{Versuch = '1' ;Cmds = $Cmds} [pscustomobject]@{Versuch = '2' ;Cmds = $Cmds} [pscustomobject]@{Versuch = '3' ;Cmds = $Cmds} ) #Die drei Versuche werden nacheinander abgearbeitet. $Versuche | %{ $Versuch = $_.Versuch $Cmds = $_.Cmds #Bei jedem Versuch werden beide Kommandos (Cmds.Cmd) abgearbeitet $Cmds | %{ $Nummer = $_.Nummer $Cmd = $_.Cmd $Result = &$Cmd Write-Host "Versuch $Versuch, Nummer $Nummer, Result $Result" $_.Result = $Result Start-Sleep 1 } Start-Sleep 1 } $Versuche.Cmds | ft -autosize
Das Ergebnis verwirrt mich:
Versuch 1, Nummer 1, Result 2019-11-06 08:29:43.602 Versuch 1, Nummer 2, Result 2019-11-06 08:29:44.618 Versuch 2, Nummer 1, Result 2019-11-06 08:29:46.618 Versuch 2, Nummer 2, Result 2019-11-06 08:29:47.618 Versuch 3, Nummer 1, Result 2019-11-06 08:29:49.618 Versuch 3, Nummer 2, Result 2019-11-06 08:29:50.618 Nummer Cmd Result ------ --- ------ 1 Get-Date -Format 'yyyy-MM-dd HH:mm:ss.fff' 2019-11-06 08:29:49.618 2 Get-Date -Format 'yyyy-MM-dd HH:mm:ss.fff' 2019-11-06 08:29:50.618 1 Get-Date -Format 'yyyy-MM-dd HH:mm:ss.fff' 2019-11-06 08:29:49.618 2 Get-Date -Format 'yyyy-MM-dd HH:mm:ss.fff' 2019-11-06 08:29:50.618 1 Get-Date -Format 'yyyy-MM-dd HH:mm:ss.fff' 2019-11-06 08:29:49.618 2 Get-Date -Format 'yyyy-MM-dd HH:mm:ss.fff' 2019-11-06 08:29:50.618
Wie man sieht, hat Write-Host nach jedem Kommando und Versuch jeweils eine Sekunde Pause gelassen. Wenn ich das Ergebnis anschließend in Versuche.Cmds betrachte, scheint es, als würden der aktuelle Versuch alle Custom Objects (Cmds) gleichzeitig zu überschreiben. Weiß jemand eine Lösung, wie ich dasselbe Ergebnis erhalte, das mit auch durch Write-Host angezeigt wird?
Schon mal vielen Dank für die Mühe
Heiko Sattler