Datenaustausch zwischen Jobs über Events per Forward-Parameter

Backgorundjobs sind bezüglich ihrer Möglichkeit auf Variablen außerhalb ihres Bereichs zugreifen zu können leider stark eingeschränkt. Da ein Backgroundjob im Rahmen einer eigenen Remoting-Session ausgeführt wird, gelten dieselben Einschränkungen wie allgemein bei PowerShell-Remoting. Soll ein Scriptblock, der als Backgroundjob ausgeführt wird, Mitteilungen an das Skript senden, von dem er aus gestartet wurde, geht dies am einfachsten über Events, konkret die Cmdlets Register-EngineEvent und New-Event. Zuerst wird per Register-EngineEvent ein Event im Scriptblock registriert. Dabei kommt es auf den Forward-Parameter an. Anschließend wird während der weiteren Ausführung des Scriptblocks per New-Event ein Event ausgelöst und automatisch weitergeleitet. Die zu versendenden Daten werden dem MessageData-Parameter übergeben. Außerhalb des Scriptblocks hat man mehrere Möglichkeiten, auf das Event zu reagieren:

  • Man schaut per Get-Event-Cmdlet nach
  • Man wartet auf das Event per Wait-Event-Cmdlet
  • Man registriert es erneut, verbindet es über den Action-Parameter von Register-EngineEvent dieses Mal mit einem Scriptblock, dessen Befehle ausgeführt werden, wenn das Event in der Remote-Session eingetreten ist

Das folgende Beispiel verwendet diese Technik.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

This site uses Akismet to reduce spam. Learn how your comment data is processed.