如何使用参数列表将参数添加到作业中

时间:2019-04-04 12:51:49

标签: powershell jobs

我正在尝试使用作业和Add-Jobtracker矩阵创建响应式表单。 我遇到的问题是当我尝试在作业中调用变量时。我使用了-Argumentlist参数,但是它始终为Null,并且我确定我使用它的方式是错误的,请您指导一下我吗?

这只是一个例子,因为我的原始脚本稍微复杂一点,下面的脚本只会将2个变量中的文本写入文本框。我已经在作业脚本的内部和外部创建了相同的内容,并在其中使用了参数列表和参数,但无法正常工作。

$Var1 = "sdaasdsadsa"
$Var2 = "asdasdsadsadsa"

$JobScript = {
    Param($Var1, $Var2)
    Write-Host $Var1, $Var2
}

$UpdateScript = {
    Param($Job)
    $texbox.Text = 'Working...'
}

$CompletedScript = {
    Param($Job)
    $results = Receive-Job -Job $Job
    $textbox.Text = $results    
}

Add-JobTracker -Name "test" -JobScript $JobScript -UpdateScript $UpdateScript -CompletedScript $CompletedScript -ArgumentList $var1, $Var2

这时它什么也没做,我有另一种代码,但是比这更长,并且我不想打扰很多人。

1 个答案:

答案 0 :(得分:0)

作业与脚本的其余部分在不同的范围内运行,并且在该范围内未定义变量,因此未定义$null。 要在作业中调用变量,请使用$Using:Varname语法。例如:

$Test = "TEST!"
$null = Start-Job {
    $Test
}
$Job = Get-Job
Start-Sleep -Seconds 2
Receive-Job -Job $Job

完全没有任何输出,但是:

$Test = "TEST!"
$null = Start-Job {
    $Using:Test
}
$Job = Get-Job
Start-Sleep -Seconds 2
Receive-Job -Job $Job

收益:

TEST!

在此处了解有关远程变量的更多信息:https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_remote_variables?view=powershell-6