Powershell 增加作业中的变量
我想在PowerShell作业中增加一个变量,并在作业开始前定义一个数字 我尝试使用一个全局变量,但它不起作用,所以现在我尝试在一个文件中写入并加载到我的工作中,但也不起作用。 我总结一下我的循环:Powershell 增加作业中的变量,powershell,jobs,Powershell,Jobs,我想在PowerShell作业中增加一个变量,并在作业开始前定义一个数字 我尝试使用一个全局变量,但它不起作用,所以现在我尝试在一个文件中写入并加载到我的工作中,但也不起作用。 我总结一下我的循环: $increment = 1 $Job_Nb = 1..3 foreach ($nb in $Job_Nb) { $increment > "C:\increment.txt" Start-Job -Name $nb -ScriptBlock { $incr
$increment = 1
$Job_Nb = 1..3
foreach ($nb in $Job_Nb) {
$increment > "C:\increment.txt"
Start-Job -Name $nb -ScriptBlock {
$increment_job = Get-Content -Path "C:\increment.txt"
$increment_job
}
$increment++
}
我希望我的两个变量$increment\u job
和$increment
相等。
我使用命令Wait Job
获得了良好的结果,如下所示:
$increment = 1
$Job_Nb = 1..3
foreach ($nb in $Job_Nb) {
$increment > "C:\increment.txt"
Start-Job -Name $nb -ScriptBlock {
$increment_job = Get-Content -Path "C:\increment.txt"
$increment_job
} | Wait-Job | Receive-Job
$increment++
}
但是我不能等每一项工作完成后再开始下一项工作,太长了。。。我需要在后台执行很多工作
对我来说,即使是$nb
,$increment
和$increment\u job
也可以是相等的
如果它能帮助你理解,一个非常简单的表达方式:
$nb = 1
$Job_Nb = 1..3
foreach ($nb in $Job_Nb) {
Start-Job -Name $nb -ScriptBlock {$nb}
$nb++
}
如果希望两个变量相等,可以将
$increment
作为参数传递到脚本块中
# Configure the Jobs
$increment = 1
$Job_Nb = 1..3
Foreach ($nb in $Job_Nb) {
Start-Job -Name $nb -ScriptBlock {
$increment_job = $args[0]
$increment_job
} -ArgumentList $increment
$increment++
}
# Retrieve the Jobs After Waiting For All to Complete
Wait-Job -Name $job_nb | Receive-Job
正如您所发现的,初始方法的问题是PowerShell在单个作业完成之前处理整个循环。因此,作业在其内容设置为3
之前不会读取increment.txt
文件
将值传递到没有参数块的脚本块的-ArgumentList
参数中,将自动将参数分配给$args
数组。以空格分隔的参数将成为数组的一个元素。不以空格分隔的值可以简单地检索为$args
或$args[0]
,区别在于$args
将返回一种类型的对象[]
,而$args[0]
将返回传递给它的数据类型
显然,您不需要等待所有作业完成。您可以随时使用Get Job
检索您想要的任何作业。。。。我很傻:'(我已经知道$args了…为什么我没想到呢,哈哈。谢谢你,它很好用^_^