我正在尝试使用作业和Add-Jobtracker
矩阵创建响应式表单。我遇到的问题是当我尝试在作业中调用变量时。我使用了-Argumentlist
参数,但它总是空的,我确定我使用它的方式是错误的,你能指导我吗?
这只是一个例子,因为我的原始脚本有点复杂,下面的脚本只会将文本从2个变量写入文本框。我在jobscript中创建了相同的外部和内部,在其中使用了参数列表和参数,但它不起作用。
$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
在这一点上它没有做任何事情,我有一个替代代码,但它比这个更长,我不想打扰你们很多行。
作业的运行范围与脚本的其余部分不同,在该范围内,变量未定义,因此$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