ジョブ内で関数を使用する簡単な実例を取得しようとしています。関数を仕事に使用するスクリプトブロックに渡すことができましたが、関数のパラメーターを取得できないようです。
# concurrency
$Logx =
{
param(
[parameter(ValueFromPipeline=$true)]
$msg
)
Write-Host ("OUT:"+$msg)
}
# Execution starts here
cls
$colors = @("red","blue","green")
$colors | %{
$scriptBlock =
{
Invoke-Expression -Command $args[1]
Start-Sleep 3
}
Write-Host "Processing: " $_
Start-Job -scriptblock $scriptBlock -args $_, $Logx
}
Get-Job
while(Get-Job -State "Running")
{
write-host "Running..."
Start-Sleep 2
}
# Output
Get-Job | Receive-Job
# Cleanup jobs
Remove-Job *
出力は次のとおりです。
Processing: red
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
175 Job175 Running True localhost ...
Processing: blue
177 Job177 Running True localhost ...
Processing: green
179 Job179 Running True localhost ...
179 Job179 Running True localhost ...
177 Job177 Running True localhost ...
175 Job175 Running True localhost ...
Running...
Running...
OUT:
OUT:
OUT:
したがって、出力のOUT:x3で証明されているように、関数が呼び出されていますが、関数のパラメーターを取得できる構文が見つかりません。考え?
編集:
以下のShawnの観察と私の応答では、従来の関数を使用すると機能しないように見えるため、関数を変数として使用してみました。それを機能させる方法があれば、関数を変数として渡す必要がないことを嬉しく思います。