Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 增加作业中的变量_Powershell_Jobs - Fatal编程技术网

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

我想在PowerShell作业中增加一个变量,并在作业开始前定义一个数字

我尝试使用一个全局变量,但它不起作用,所以现在我尝试在一个文件中写入并加载到我的工作中,但也不起作用。 我总结一下我的循环:

$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了…为什么我没想到呢,哈哈。谢谢你,它很好用^_^