Jump to content

PowerShell: Invoke-Command liefert einzelne Objekte


Direkt zur Lösung Gelöst von cj_berlin,

Empfohlene Beiträge

Geschrieben

Unterhalb des Registrierungsschlüssel HKEY_CURRENT_USER\TEST befinden sich mehrere Unterschlüssel, deren Namen durchnummeriert sind.  Per Invoke-Command frage ich die Unterschlüsseln von mehreren Remotemaschinen ab. Leider bekomme ich jeder einzelne Objekt, und nicht wie erwartet, die Sammlung zurück. Die Varianten, den Inhalt der Pipeline in einer Variablen  zu speichern noch jedes Objekt einer ArrayList hinzufügen, brachten das gewünschte Ergebenis. Führe ich den Skriptblock lokal aus, funktioniert es erwartungsgemäß.

 

Wie muss ich mein Skript abändern, damit  ichdie Sammlung und nicht jedes einzelne Ojekt von den remote abgefragten Computern erhalte?

 

$params = @{
    ComputerName = Get-ADComputer -Filter 'Name -like "test*' | Select-Object -ExpandProperty Name
    ScriptBlock  = {
        $regKey    = 'Registry::HKEY_CURRENT_USER\TEST'

        $test = New-Object -TypeName System.Collections.ArrayList
        # $test = Get-ChildItem -Path $regKey -Recurse -ErrorAction SilentlyContinue | 
        Get-ChildItem -Path $regKey -Recurse -ErrorAction SilentlyContinue | 
        ForEach-Object {
            $null = $test.Add(
                [pscustomobject]@{
                    Version = [int]($PSItem | Select-Object -ExpandProperty PSChildName)
                    IsValid = [boolean]$PSItem.GetValue('IsValid', $false)
                })
        }

        $test

    }
    Credential   = Get-Credential -Message 'Please enter your credentials'
    AsJob        = $true
}

$job = Invoke-Command @params
Wait-Job -Job $job
Receive-Job -Job $job -Keep 

 

Geschrieben

Nur damit ich es richtig verstehe:

 

Der Job gibt pro Zielcomputer ein Array zurück. Und weil es mehrere Jobs sind, hast Du anschließend ein "Array von Arrays", aber nicht wie erwartet verschachtelt (ein Array, in dem jedes Element wiederum ein Array ist), sondern alles flat. Entspriicht eigentlich genau meiner Erwartung :-) Wenn Du das anders haben willst, kannst Du vermutlich die Jobs einzeln abholen - ich hab nie mit Jobs gearbeitet, daher wenig Erfahrung, ich verwende nahezu nur Runspaces.

 

Das Hinzufügen eines Arrays zu einem Array kann kompliziert sein :-) 

Geschrieben (bearbeitet)

Das ist halt nicht gottgegeben, sondern Snover-/Payette-gegeben. Wenn ich sage, ich gebe eine Collection zurück, von einem bestimmten Typ, ist es keine überzogene Erwartung, dass PowerShell sie nicht in ihren internen Array-Typ wandelt und dann mit anderen ähnlichen Ergebnissen zusammenrührt. Ja, wir wissen, dass das so ist, aber wir wissen ja auch, dass PowerShell viele Quirks hat, die nur mit "ist halt so" zu erklären sind.

bearbeitet von cj_berlin

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...