問題タブ [powershell-jobs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
369 参照

multithreading - Start-ThreadJob で開始されたスレッドで PowerShell $using スコープ変数を変更する

PowerShell Scopesのドキュメントを理解していれば、$usingを使用して開始されたスレッドからスコープ変数に割り当てることができるはずStart-ThreadJobです。ドキュメントには次のように書かれています(強調鉱山):

Usingスコープ修飾子は、次のコンテキストでサポートされています。

  • ...
  • Start-ThreadJobまたはForEach-Object -Parallel(別のスレッド セッション)を介して開始されたスレッド ジョブ

コンテキストに応じて、埋め込み変数の値は、呼び出し元のスコープ内のデータの独立したコピーか、それへの参照のいずれかになります。
...
スレッド セッションでは、参照によって渡されます。これは、別のスレッドで呼び出しスコープ変数を変更できることを意味します。変数を安全に変更するには、スレッドの同期が必要です。

それでも、以下は実行に失敗します:

次のエラーが発生$using:foo = 2します。

代入式が無効です。代入演算子への入力は、変数やプロパティなど、代入を受け入れることができるオブジェクトでなければなりません。

変数の印刷はWrite-Host $using:foo正しく機能します。

PowerShell 7.1 を使用しています。