0

簡単な話: powershell を使った実験のために、スクリプトを効果的にマルチスレッド化する方法を学ぼうとしています。

これで、ジョブを開始して 2 番目のスクリプトに変数を渡す方法がわかりましたが、これを有効にする方法を試してみることにしました。

start-job ((Split-Path -parent $PSCommandPath) + "\someScript.ps1") -ArgumentList (,$argList)

これに:

start-job (. ((Split-Path -parent $PSCommandPath) + "\someScript.ps1")) -ArgumentList (,$argList)

この理由は、次のように親スクリプトで宣言された変数があるためです。

New-Variable var -value 0 -Option AllScope

子スクリプト:var = "something" 最初の start-job は引数を渡しますが、子はグローバル 'var' 変数を設定しません

2 番目は私の引数を渡しませんが、子スクリプトは親で定義されたグローバル変数を問題なく設定します。$argList 変数は、2 番目の開始ジョブでこのコード行まで入力されますが、行の実行直後に、デバッグによって $argList 変数が null であることが明らかになり、「Start-Job : 引数をパラメーターにバインドできません」というメッセージが表示されますScriptBlock' は null であるためです。"

議論のために、記述されたコード行まで、変数には必要なデータが含まれていると仮定します。

誰かが両方の試みの何が問題なのか私を助けてくれますか? Google は、私の問題に対する具体的な回答を提供してくれませんでした。私が得ることができる助けを前もって感謝します。

編集:使用Start-Job (. ((Split-Path -parent $PSCommandPath) + "\someScript.ps1") $argList) すると目標が達成Start-Job : Cannot bind argument to parameter 'ScriptBlock' because it is null. されますが、引数がスクリプト ブロックにあり、子スクリプトが引数を取得して処理しているにもかかわらず、取得し続けます。

4

1 に答える 1