ZetCode

PowerShell Wait-Process

最后修改:2025 年 2 月 15 日

在本文中,我们将介绍PowerShell中的Wait-Process cmdlet。此cmdlet在继续脚本执行之前等待进程停止。它对于进程同步很有用。

Wait-Process基础知识

Wait-Process cmdlet在接受输入之前等待一个或多个正在运行的进程停止。它可以等待按名称、ID或进程对象指定的进程。当脚本需要等待应用程序完成时,这很有帮助。

Wait-Process基本用法

使用Wait-Process的最简单方法是使用进程名称。cmdlet将一直等待,直到该进程的所有实例终止。这会阻塞脚本执行,直到满足条件。

wait1.ps1
Wait-Process -Name "notepad"

此命令等待所有记事本进程退出。PowerShell会话将保持无响应,直到记事本关闭。除非使用-Verbose,否则不会产生任何输出。

按ID等待进程

您可以使用进程ID(PID)等待特定进程。这很精确,因为每个进程都有唯一的ID。使用-Id参数后跟PID。当针对特定实例时,这很有用。

wait2.ps1
Wait-Process -Id 1234

此命令等待ID为1234的进程终止。脚本将暂停执行,直到该特定进程退出。对于监视特定应用程序实例很有用。

等待超时

您可以使用-Timeout参数为等待指定超时时间。如果进程挂起,这可以防止无限等待。值以秒为单位。超时后,如果进程仍在运行,则会引发错误。

wait3.ps1
Wait-Process -Name "calc" -Timeout 30

此命令等待计算器退出,但只等待30秒。如果30秒后计算器仍在运行,则会发生错误。这可以防止脚本无限挂起。

等待多个进程

Wait-Process可以同时等待多个进程。提供由逗号分隔的多个进程名称或ID。cmdlet将一直等待,直到所有指定的进程终止。

wait4.ps1
Wait-Process -Name "notepad", "calc"

此命令等待记事本和计算器都关闭。仅当两个进程都不运行时,脚本才会继续。对于复杂的依赖关系场景很有用。

管道输入

Wait-Process可以从管道接受进程对象。这允许与Get-Process结合使用以灵活地选择进程。管道方法对于复杂过滤非常强大。

wait5.ps1
Get-Process -Name "chrome" | Wait-Process

此命令获取所有Chrome进程并等待它们退出。管道将进程对象直接传递给Wait-Process。这比使用中间变量更清晰。

错误处理

默认情况下,Wait-Process会为不存在的进程引发错误。使用-ErrorAction SilentlyContinue可以抑制这些错误。当进程终止不确定时,这很有用。

wait6.ps1
Wait-Process -Name "nonexistent" -ErrorAction SilentlyContinue

此命令尝试等待一个不存在的进程,但会抑制错误。由于该进程未运行,脚本会立即继续。对于清理脚本很有用。

详细输出

-Verbose参数提供有关等待进程的详细信息。这有助于调试和监视脚本执行。详细输出显示正在监视的进程。

wait7.ps1
Wait-Process -Name "explorer" -Verbose

此命令等待Windows资源管理器关闭并显示详细输出。控制台显示实时状态更新。有助于理解脚本行为。

与Stop-Process结合使用

Wait-Process通常与Stop-Process一起使用,以确保进程终止。首先请求终止,然后等待完成。这可以创建可靠的进程管理序列。

wait8.ps1
Stop-Process -Name "notepad" -PassThru | Wait-Process

此命令停止记事本并等待其完全终止。-PassThru将进程对象传递给Wait-Process。确保在继续之前干净地关闭。

来源

PowerShell 文档

在本文中,我们介绍了PowerShell中的Wait-Process cmdlet。

作者

我的名字是Jan Bodnar,我是一名充满激情的程序员,拥有丰富的编程经验。我自2007年以来一直撰写编程文章。迄今为止,我已撰写了1400多篇文章和8本电子书。我在教授编程方面有十多年的经验。

列出 所有 PowerShell 教程