私は複数のジョブを持っており、すべてのジョブに対していくつかのものを設定する同じ初期化スクリプトが必要です。いくつかの引数を初期化スクリプトに渡したいと思いますが、残念ながら-ArgumentList
を使って渡された引数は、実際のジョブスクリプトでのみアクセス可能なようです。ジョブ初期化スクリプトへの引数の受け渡し
はここだけで、実際のスクリプトでアクセス可能な引数を示しています例です:
function StartJob([ScriptBlock] $script, [string] $name, [ScriptBlock] $initialization_script = $null, $argument = $null)
{
Start-Job -ScriptBlock $script -Name $name -InitializationScript $initialization_script -ArgumentList $argument | Out-Null
}
[ScriptBlock] $initialization_script =
{
# The argument given to StartJob should be accessible here
param($test)
echo "Test: $test"
}
[ScriptBlock] $actual_script =
{
param($test)
echo "Test: $test"
}
StartJob $actual_script "Test job" $initialization_script "Have this string in the `$initialization_script"
@(Get-Job).ForEach({
# Wait for the job to finish, remove it and output its results
Write-Host "$($_.Name) results:"
Receive-Job -Job $_ -Wait -AutoRemoveJob | Write-Host
})
どのように私は$initialization_script
に渡される引数にアクセスすることができるだろうか?
私はあなたができるとは思いません。目的は何ですか? –
@ MathiasR.Jessen作業ディレクトリのすべてのジョブに対してロードするモジュールがありますが、新しいジョブは現在の作業ディレクトリが何であるか分かりません。あるいは、すべてのスクリプト自体でモジュールをインポートすることもできますが、それは非常にきれいな解決策のようには見えません。 – tambre
個人的意見:あなただけを保存するラッパーです。 Out-Nullは無駄です。コピー/貼り付けができます。 –