Hallo zuammen,
ich experimentiere mit EventHandlern und habe mir das hier zusammengeschrieben:
cls Get-EventSubscriber|Unregister-Event Get-Job|Remove-Job function JobEventhandler { param ( $f_ThisJob ) write-host "Triggered" write-host $f_ThisJob } for ($i = 1;$i -lt 2;$i++) { $i $JOB = start-job ` -name $i ` -scriptBlock {start-sleep -seconds 3; 1...5 } $null = register-ObjectEvent -inputobject $JOB -EventName StateChanged -SourceIdentifier "JobEnd$i" -action {JobEventhandler($sender) } }
Ziel ist es, eine dynamische Anzahl von Jobs zu erzeugen, und für jeden einen Eventhandler zu generieren.
Wenn der Job seinen Status ändert, wird das Event getriggert und der Job verarbeitet.
Das o.g. Script funktioniert soweit, daß mit jeder Statusänderung eines Jobs die korrelierende Action gestartet wird.
Was aber nicht funktioniert, ist die Übergabe des "$sender".
Hier wird egal was ich mache, nur ein "System.Management.Automation.PSRemotingJob" zurück gegeben.
Hier eine Beispielausgabe mit 2 Jobs:
1 2 PS C:\WINDOWS\system32> Triggered System.Management.Automation.PSRemotingJob Triggered System.Management.Automation.PSRemotingJob
Ich stütze mich hier auf diesen Artikel:
The action uses the $Sender and $EventArgs automatic variables which are populated only for event actions.
..."
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/register-objectevent?view=powershell-5.1
Was übersehe ich?