如果使用 -Wait 参数运行,如何更改 powershell 中进程的优先级?

How to change priority of process in powershell, if it runs with -Wait parameter?

我正在使用预定的 PowerShell 脚本在循环中多次启动具有各种参数的相同进程。 Process 的计算量很大,运行s 很长一段时间,我有数千次迭代。我注意到,因为它是一个预定脚本,所以它 运行 具有 BelowNormal 优先级。即使我碰到它,任何生成的进程仍然低于正常。所以,因为我 运行 这个过程在一个循环中数千次,所以我需要像这样使用 -Wait

foreach($list in $lists){

        Start-Process -FilePath $path_to_EXE -ArgumentList $list -NoNewWindow -Wait

}

现在,我想提高优先级,我找到的一种方法是:

($MyProcess = Start-Process -FilePath $path_to_EXE -ArgumentList $list  -NoNewWindow -Wait -PassThru).PriorityClass = [System.Diagnostics.ProcessPriorityClass]::AboveNormal

但是,它不起作用,因为它需要等到进程完成,然后执行括号外的任何内容:(...).PriorityClass = ... 我不能让它继续循环并产生数千个进程,我需要一次 运行 一个,但我如何告诉它提高优先级,然后等待?

您可以通过 Wait-Process:

在您的代码中执行等待操作
foreach($list in $lists) {
    $MyProcess = Start-Process -FilePath $path_to_EXE -ArgumentList $list  -NoNewWindow -PassThru
    $MyProcess.PriorityClass = [System.Diagnostics.ProcessPriorityClass]::AboveNormal
    $Myprocess | Wait-Process
}

Start-Process返回的对象也有一个.WaitForExit()方法:

foreach($list in $lists) {
    $MyProcess = Start-Process -FilePath $path_to_EXE -ArgumentList $list  -NoNewWindow -PassThru
    $MyProcess.PriorityClass = [System.Diagnostics.ProcessPriorityClass]::AboveNormal
    $Myprocess.WaitForExit()
}