是否可以将脚本块包含在与包含start-job方法的函数不同的函数中?
我要找的是:
function Get-jobA
{
$params="data1,data2"
$jobs += Start-Job -ScriptBlock Get-MyScriptBlock -ArgumentList $params
}
function Get-MyScriptBlock
{
[string]param1,[string]param2 = $args
Start-Process -FilePath <someFile> -ArgumentList 'param1,param2' -PassThru -Wait
}发布于 2013-05-24 22:48:51
作业有其自己的作用域,因此需要在作业中定义函数,然后才能使用它。您可以使用InitializationScript参数在作业中传递函数定义,语法如下。
$functions = {
function Get-MyScriptBlock
{
return "Hello!";
}
}
function Get-jobA
{
$job = Start-Job -InitializationScript $functions
-ScriptBlock { Get-MyScriptBlock } | Wait-Job | Receive-Job
Write-Host $job;
}
Get-jobA发布于 2013-05-25 03:27:17
-ScriptBlock的参数必须是脚本块。但是,您的函数不返回脚本块,而是返回Start-Process cmdlet的结果。将其更改为实际返回脚本块:
function Get-MyScriptBlock {
return {
Param([string]param1, [string]param2)
Start-Process -FilePath <someFile> -ArgumentList $param1, $param2 `
-PassThru -Wait
}
}并像这样修改Get-JobA:
function Get-jobA {
$params = "data1", "data2"
$jobs += Start-Job -ScriptBlock (Get-MyScriptBlock) -ArgumentList $params
}请注意Get-MyScriptBlock周围的括号。您需要在子subshell中执行该函数,否则PowerShell会将-ArgumentList $params解释为Get-MyScriptBlock的参数,而不是Start-Job。另请注意,当脚本块需要两个字符串参数时,参数列表必须是两个字符串的数组。
https://stackoverflow.com/questions/16737037
复制相似问题