Multithreading 具有不同参数的多线程powershell脚本

Multithreading 具有不同参数的多线程powershell脚本,multithreading,powershell,optimization,Multithreading,Powershell,Optimization,我正在尝试运行Powershell脚本,该脚本跨日期范围从APM设备提取数据。但是,一周的约会范围可能需要9个小时。当我按日期在for循环中运行它时,需要35分钟: for($i = 0; $i -lt $dateList.Length-1; $i++){ & "C:\Scripts\Grabber.ps1" -date $dateList[$i] -date2 $dateList[$i+1] } 我需要进一步优化。我已经看过了,但我似乎无法理解这一点!我非常感谢您的帮助,谢

我正在尝试运行Powershell脚本,该脚本跨日期范围从APM设备提取数据。但是,一周的约会范围可能需要9个小时。当我按日期在for循环中运行它时,需要35分钟:

for($i = 0; $i -lt $dateList.Length-1; $i++){
    & "C:\Scripts\Grabber.ps1" -date  $dateList[$i] -date2 $dateList[$i+1]
}

我需要进一步优化。我已经看过了,但我似乎无法理解这一点!我非常感谢您的帮助,谢谢。

好吧,请将您的脚本包含在脚本块中好吗

for($i = 0; $i -lt $dateList.Length-1; $i++){
    start-rsjob -name {$_} -ScriptBlock {
        & "C:\Scripts\Grabber.ps1" -date  ($using:dateList)[$using:i] -date2 ($using:dateList)[$using:i+1] 
    }
}

那有什么问题?我绝对会选择Runspacesthat@4c74356b41你能推荐一种资源吗?尝试了technet,但我得到了一个语法错误:错误:“在“(”)之后应该有一个表达式。代码:$Runspace=[runspacefactory]::CreateRunspace()$PowerShell=::Create()$PowerShell.Runspace=$Runspace$Runspace.Open()[void]$PowerShell.AddScript({get Date Start Sleep-Seconds 10})$AsyncObject=$PowerShell.BeginInvoke()不,我是说PoshRSJob,除非你想重新发明轮子来澄清:我想每天运行Grabber.ps1 7天。每天都必须并行调用Grabber.ps1脚本。这有意义吗?@4c74356b41好的,谢谢。我如何调用脚本并将日期值作为参数传递?我只能看到脚本块的示例。这是一个slow星期一..干杯。但是现在我得到一个“表达式不允许在使用表达式中使用”在$i变量上。我只是以字符串形式传递了一个日期,脚本执行,但没有按应有的方式运行。它甚至没有击中grabber.ps1脚本顶部的print语句。有什么想法吗?好吧,在scriptblock中重新将$i和$datelist分配给新变量,并使用它们1)您也应该
$using:i
。2) 您应该使用括号来避免导致分析错误:
($using:dateList)[$using:i]