解决 powershell 作业范围问题的优雅方法
Elegant way to get around scoping issues with powershell jobs
我在单独的文件中有函数,我需要 运行 作为一个主文件中的作业。
我需要能够传递这些函数参数。
这是我的:
testJobsMain.ps1:
$Functions = {
. c:\.ps\func1.ps1
. c:\.ps\func2.ps1
}
$arrOutput = @()
foreach($i in ('aaa','bbb','ccc','ddd','eee') ) {
$ExecutionBlock = {
FOO -myArg $i
FOO2 -blah 'zzzzzzz'
}
$arrOutput += Start-Job -InitializationScript $Functions `
-ScriptBlock $ExecutionBlock |
Wait-Job | Receive-Job
}
$arrOutput
func1.ps1
function FOO( $myArg ) { write-output $myArg }
func2.ps1
function FOO2( $blah ) { write-output $blah }
这是 testJobsMain 的输出。ps1:
PS> .\testjobsMain.ps1
zzzzzzz
zzzzzzz
zzzzzzz
zzzzzzz
它 $i
没有传递给函数。我该怎么做?
您必须像这样将其作为参数传递
$ExecutionBlock = {
param($passedI)
FOO -myArg $passedI
FOO2 -blah 'zzzzzzz'
}
$arrOutput += Start-Job -InitializationScript $Functions `
-ScriptBlock $ExecutionBlock -ArgumentList $i |
Wait-Job | Receive-Job
或像这样使用 using
修饰符(学分转到 Eris)
...
FOO -myArg $using:i
...
我在单独的文件中有函数,我需要 运行 作为一个主文件中的作业。
我需要能够传递这些函数参数。
这是我的:
testJobsMain.ps1:
$Functions = {
. c:\.ps\func1.ps1
. c:\.ps\func2.ps1
}
$arrOutput = @()
foreach($i in ('aaa','bbb','ccc','ddd','eee') ) {
$ExecutionBlock = {
FOO -myArg $i
FOO2 -blah 'zzzzzzz'
}
$arrOutput += Start-Job -InitializationScript $Functions `
-ScriptBlock $ExecutionBlock |
Wait-Job | Receive-Job
}
$arrOutput
func1.ps1
function FOO( $myArg ) { write-output $myArg }
func2.ps1
function FOO2( $blah ) { write-output $blah }
这是 testJobsMain 的输出。ps1:
PS> .\testjobsMain.ps1
zzzzzzz
zzzzzzz
zzzzzzz
zzzzzzz
它 $i
没有传递给函数。我该怎么做?
您必须像这样将其作为参数传递
$ExecutionBlock = {
param($passedI)
FOO -myArg $passedI
FOO2 -blah 'zzzzzzz'
}
$arrOutput += Start-Job -InitializationScript $Functions `
-ScriptBlock $ExecutionBlock -ArgumentList $i |
Wait-Job | Receive-Job
或像这样使用 using
修饰符(学分转到 Eris)
...
FOO -myArg $using:i
...