如果使用 -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()
}
我正在使用预定的 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()
}