Quantcast
Viewing all articles
Browse latest Browse all 2314

Custom-Object-Array in Custom-Object-Array: Aktualisierung beschreibt alle Arrays im Array gleichzeitig

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


Viewing all articles
Browse latest Browse all 2314


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>