Ich versuche herauszufinden, wie ScriptBlock.GetNewClosure () funktioniert. Basierend auf diesem Thread (siehe Stejs Antwort) Ich habe diesen Code:
%Vor%Die Ausgabe ist:
%Vor%was erwartet wird, denn wenn die ScriptBlocks ausgeführt werden, wird der aktuelle $ i Wert verwendet. Dies kann mit GetNewClosure () geändert werden:
%Vor%Diesmal ist die Ausgabe:
%Vor%Das ist gut, aber wenn ich versuche, die ScriptBlocks als Jobs zu markieren:
%Vor%Es gibt keine Ausgabe. Auf der Suche nach einer Antwort habe ich diesen -Thread gefunden, wobei x0n besagt, dass Jobs in einer dynamischen ausgeführt werden Modul. Module haben den Sitzungsstatus isoliert und teilen den Zugriff auf Globals. PowerShell-Closures funktionieren nur innerhalb derselben Sitzungsstatus- / Bereichskette
Bedeutet das, dass $ i nicht von Jobs aus erreichbar ist? Wenn ich seinen Wert teste:
%Vor%$ ist gleich null.
Ja, dies bedeutet, dass $i
auf diese Weise nicht von Jobs aus zugänglich ist. Unglücklicherweise. Verwenden Sie also einen anderen Weg: zum Beispiel param
in einem Skriptblock, der als Job aufgerufen werden soll, und ArgumentList
-Parameter von Start-Job
:
Ausgabe:
%Vor% P.S. Es wird berichtet, dass GetNewClosure
auch nicht mit Register-ObjectEvent
funktioniert:
Ссылка
Tags und Links powershell