gpt4 book ai didi

powershell - 每个循环中的Powershell启动过程

转载 作者:行者123 更新时间:2023-12-02 23:49:23 25 4
gpt4 key购买 nike

对于每个希望并行运行的循环,我都有一个for,但是关于每个迭代何时开始,我得不到统一的时间,这导致了一些边缘情况下的时序问题。
因此,我将循环更改为连续的。但是,我不想等待迭代命令完成。
每次迭代本质上都在做:

Invoke-Pester @{Path= "tests.ps1"; Parameters = @{...}} -Tag 'value' -OutputFile $xmlpath -OutputFormat NUnitXML -EnableExit
我希望每个迭代都按顺序运行(测试期望按顺序运行),但是我不想等待测试完成。
确保迭代不等待Invoke-Pester命令完成以使下一个迭代在上一次迭代启动后开始的最佳方法是什么?我尝试过使用Start-Process Invoke-Pester,但我认为它使进一步的代码结构无效。
谢谢

最佳答案

异步处理的一种方法是PowerShell jobs。一个非常基本的例子:

$jobs = foreach ($xmlPath in (...)) {
Start-job { Invoke-Pester -OutputFile $Args[0] ... } -ArgumentList $xmlPath
}

# get the job results later:
$jobs | Receive-Job
但是,工作非常缓慢。使用 background runspaces可以提高性能,但也要复杂一些:
$jobs = foreach ($xmlPath in (...)) {
$ps = [Powershell]::Create()
[void]$ps.AddScript({ Invoke-Pester -OutputFile $Args[0] ... })
[void]$ps.AddArgument($xmlPath)
@{
PowerShell = $ps
AsyncResult = $ps.BeginInvoke()
}
}

# get results:
foreach ($job in $jobs) {
$job.PowerShell.EndInvoke($_.AsyncResult)
$job.PowerShell.Dispose()
}

关于powershell - 每个循环中的Powershell启动过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64650469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com