ZetCode

PowerShell -PassThru 参数

最后修改:2025 年 2 月 15 日

在本文中,我们将介绍 PowerShell 中的 -PassThru 参数。此参数会返回默认情况下不会返回的对象。

-PassThru 基础知识

-PassThru 参数告诉 cmdlet 在通常情况下不输出时也返回输出对象。许多 cmdlet 默认执行不带输出的操作。-PassThru 会强制这些 cmdlet 返回受影响的对象。这对于在管道中链接命令非常有用。

Stop-Process 的基本 -PassThru 用法

默认情况下,Stop-Process 在终止进程时不会返回任何输出。使用 -PassThru,它会返回已停止的进程对象。这允许您验证操作或将结果通过管道传递。

passthru1.ps1
Stop-Process -Name "notepad" -PassThru

此命令会停止所有记事本进程并返回它们的对应对象。如果没有 -PassThru,您将无法确认此操作。

-PassThru 与 Start-Process 的用法

Start-Process 默认不返回新的进程对象。使用 -PassThru,您可以获取已启动应用程序的进程对象。这对于跟踪或管理新进程非常有用。

passthru2.ps1
$proc = Start-Process notepad -PassThru
$proc | Select-Object Id, Name, StartTime

此命令启动记事本并将其实例的进程对象存储在 $proc 中。然后,我们显示新进程的选定属性。

-PassThru 与 Wait-Process 的用法

Wait-Process 在等待完成时通常不返回任何内容。使用 -PassThru,它会返回正在等待的进程对象。这可以确认正在监视哪个进程。

passthru3.ps1
$proc = Start-Process notepad -PassThru
Wait-Process -InputObject $proc -PassThru

此命令启动记事本,等待其退出,然后返回其进程对象。输出确认了正在等待哪个进程。

将 -PassThru 与 Where-Object 结合使用

您可以使用 -PassThru 在将进程传递给另一个 cmdlet 之前对其进行过滤。此示例在高内存进程停止的同时保持管道的流动。过滤后的进程会被传递。

passthru4.ps1
Get-Process | Where-Object { $_.WS -gt 100MB } | 
Stop-Process -PassThru | 
Format-Table Name, Id, WS -AutoSize

此命令查找使用超过 100MB 工作集内存的进程,停止它们,并格式化输出。-PassThru 实现了管道的流动。

-PassThru 与 Debug-Process 的用法

Debug-Process 默认情况下附加调试器而不输出。使用 -PassThru,它会返回正在调试的进程。这有助于确认调试目标。

passthru5.ps1
Debug-Process -Name "powershell" -PassThru

此命令将调试器附加到 PowerShell 进程并返回它们。没有 -PassThru,您将看不到哪些进程受到了影响。

-PassThru 与 Suspend-Process 的用法

Suspend-Process 默认情况下会暂停进程而不输出。使用 -PassThru,它会返回被挂起的进程对象。这可以验证哪些进程被暂停了。

passthru6.ps1
Suspend-Process -Name "notepad" -PassThru

此命令挂起记事本进程并返回其对应对象。稍后您可以使用 Resume-Process 恢复它们。

-PassThru 与 Resume-Process 的用法

Resume-Process 默认情况下会恢复已挂起的进程而不输出。使用 -PassThru,它会返回已恢复的进程对象。这可以确认哪些进程被重新激活了。

passthru7.ps1
Resume-Process -Name "notepad" -PassThru

此命令恢复之前挂起的记事本进程并返回它们。输出显示了那些被恢复到运行状态的进程。

链接多个 -PassThru 操作

您可以通过 -PassThru 链接多个操作以保持管道的流动。此示例启动、等待并停止一个进程,同时在每个步骤中都使对象在管道中传递。

passthru8.ps1
Start-Process notepad -PassThru | 
Wait-Process -PassThru | 
Stop-Process -PassThru

此命令启动记事本,等待其退出,然后停止它,每个 cmdlet 都将进程对象传递给下一个。-PassThru 是实现整个管道正常工作的基础。

来源

PowerShell 文档

在本文中,我们介绍了 PowerShell 中的 -PassThru 参数。

作者

我的名字是 Jan Bodnar,我是一名充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。至今,我已撰写了超过 1400 篇文章和 8 本电子书。我在编程教学方面拥有十年以上的经验。

列出 所有 PowerShell 教程