Powershell Rückgabedaten eines Jobs
Hi@PS Profis,
das gci als Job laufen zu lassen läuft =).
Das Result bekomme ich auch raus.
Wie komme ich allerdings an die "FailedItems" wenn das als Job läuft?
Wenn ich das ohne Job laufen lasse kann ich normal auf die $FailedItems drauf.
Die geb ich dann mit in einer richtextbox mit Hinweis "Access Denied".
Gruß vom H41mSh1C0r
das gci als Job laufen zu lassen läuft =).
gci -Path $source -Exclude "thumb.db" -Recurse -Force -ErrorVariable FailedItems -ErrorAction SilentlyContinue -File | %{ "`n" + ($_.FullName.Replace($source, '.') + " ; " + $_.Length) + " ; " + $_.LastWriteTime.ToString() }
Das Result bekomme ich auch raus.
$result = Receive-Job -Name gciSelection
Wie komme ich allerdings an die "FailedItems" wenn das als Job läuft?
Wenn ich das ohne Job laufen lasse kann ich normal auf die $FailedItems drauf.
Die geb ich dann mit in einer richtextbox mit Hinweis "Access Denied".
Gruß vom H41mSh1C0r
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 290489
Url: https://administrator.de/forum/powershell-rueckgabedaten-eines-jobs-290489.html
Ausgedruckt am: 16.04.2025 um 15:04 Uhr
7 Kommentare
Neuester Kommentar

Moin,
gibt doch einfach alle Daten zurück, z.B. als Powershell-Objekt
Gruß grexit
gibt doch einfach alle Daten zurück, z.B. als Powershell-Objekt
$result = gci -Path $source -Exclude "thumb.db" -Recurse -Force -ErrorVariable FailedItems -ErrorAction SilentlyContinue -File | %{"`n" + ($_.FullName.Replace($source, '.') + " ; " + $_.Length) + " ; " + $_.LastWriteTime.ToString()}
New-Object PSObject -Property @{"Data"=$result;"Failed"=$FailedItems}

Zitat von @H41mSh1C0R:
wenn ich das innerhalb des Jobs dem $result zuweise hat er keine Ergebnisse außerhalb.
Neee, das passiert alles innerhalb des Skriptblocks des Jobs, zurückgegeben wird nur das PSObject aus dem Block heraus, dessen Variablen ja voher aufgelöst werden !! Das Object fasst beides nur in einem Objekt zusammen, welches du hinterher außerhalb auf die Eigenschaften .Failed und .Data abfragen kannst.wenn ich das innerhalb des Jobs dem $result zuweise hat er keine Ergebnisse außerhalb.
Simples Beispiel
$jobdata = Start-Job -ScriptBlock {
sleep(2)
New-Object PSObject -Property @{Data="testdaten";Failed="Fehlerdaten"}
} | receive-job -Wait
$jobdata

$testdaten bleibt immer leer und er springt beim debuggen über den Job rüber. ;(
Völlig logisch...Denke dran das ist ein Skriptblock der in einem separaten Thread(Runspace) ausgeführt wird, der hat keinen Zugriff auf lokale außerhalb des Skriptblocks definierten Variablen, also ist $source leer. Du musst diese mit dem Parameter -Argumentlist von start-job an den Skriptblock übergeben! Und dann dort via $args oder eine param()-Definition darauf zugreifen...

Rennt, danke. =)
Schön Aber das sleep(2) kannst du jetzt rausnehmen, das war ja nur ein Platzhalter für "Arbeit" in meinem Beispielskript
Gruß grexit