EmmKay 2 Geschrieben 24. März Melden Geschrieben 24. März 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 Zitieren
Beste Lösung cj_berlin 1.416 Geschrieben 24. März Beste Lösung Melden Geschrieben 24. März Ja, das sind Serialisierungsartefakte. Du könntest sowas machen: [PSCustomObject]@{ ComputerName = $env:COMPUTERNAME Result = $test } | ConvertTo-Json dort wo Du $test zurückgibst. Zitieren
cj_berlin 1.416 Geschrieben 24. März Melden Geschrieben 24. März Oder vielleicht sogar ohne JSON, ist ja dann dennoch nur ein Objekt pro Zielsitzung. Zitieren
EmmKay 2 Geschrieben 24. März Autor Melden Geschrieben 24. März Vielen Dank. Das war ja einfach. Ich bevorzuge hier auch die Variante ohne extra nach JSON zu konvertierten. So kann ich direkt auf die Eigenschaften zugreifen. Zitieren
daabm 1.392 Geschrieben Donnerstag um 16:27 Melden Geschrieben Donnerstag um 16:27 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 Zitieren
cj_berlin 1.416 Geschrieben Donnerstag um 18:24 Melden Geschrieben Donnerstag um 18:24 (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 Donnerstag um 18:24 von cj_berlin Zitieren
daabm 1.392 Geschrieben Sonntag um 17:47 Melden Geschrieben Sonntag um 17:47 Ja. Wir erinnern uns an "return ,$results" bei Data Tables Zitieren
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.