如何在Powershell中使用Wait-Process?

PowerShell中的Wait-Process cmdlet用于等待进程停止,然后执行继续进行下一步。

示例

我们正在运行一个截图工具应用程序,我们需要先等待该过程停止,然后再进行下一步。

PS C:\> Get-Process SnippingTool | Select Name,Id,CPU
Name          Id    CPU
----          --    ---
SnippingTool  7440   2.0625

为了等待进程首先停止,我们将使用Wait-Process命令。您可以提供ProcessName或ID。

Write-Output "Waiting for the Process to Stop"
Wait-Process -Name 'SnippingTool'
Write-Output 'Snipping tool Process is stopped'
输出结果
PS C:\> C:\Temp\TestPS1.ps1
Waiting for the Process to Stop

该过程一旦停止,

PS C:\> C:\Temp\TestPS1.ps1
Waiting for the Process to Stop
Snipping tool Process is stopped

如果所需的进程无法停止,则执行将永远等待。您还可以提供以秒为单位的timeout参数,因此,如果进程无法在指定的时间内停止,则会抛出错误。

示例

Write-Output "Waiting for the Process to Stop"
Wait-Process -Name 'SnippingTool' -Timeout 5
Write-Output 'Snipping tool Process is stopped'
输出结果
PS C:\> C:\Temp\TestPS1.ps1
Waiting for the Process to Stop
CloseError: (System.Diagnostics.…cess (SnippingTool):Process) [Wait-Process],
TimeoutException
Snipping tool Process is stopped

在这种情况下,我们可以将ErrorAction 设置更改为Stop

示例

Write-Output "Waiting for the Process to Stop"
Wait-Process -Name 'SnippingTool' -Timeout 5 -ErrorAction Stop
Write-Output 'Snipping tool Process is stopped'
输出结果
PS C:\> C:\Temp\TestPS1.ps1
Waiting for the Process to Stop
CloseError: (System.Diagnostics.…cess (SnippingTool):Process) [Wait-Process],
TimeoutException