如何使用PowerShell通过PID批量终止指定进程并返回终止结果
PowerShell 按条件批量终止进程实现方法
核心参数说明
你提到的类似-v的输出已终止进程详情的效果,不需要自定义flag实现:PowerShell 内置的Stop-Process命令自带-PassThru参数,添加该参数后,命令执行终止操作时会返回所有被成功结束的进程对象,直接输出即可查看哪些进程被终止。
带if判断的标准实现代码
完全对应你给出的伪代码逻辑,可直接运行的代码如下:
# 获取全量进程列表赋值给变量x $x = Get-Process # 遍历进程做名称匹配,符合条件的终止并记录结果 $stoppedProcesses = $x | Where-Object { # if判断逻辑:进程名为y或z时命中 if ($_.Name -in @("y", "z")) { return $true } return $false } | Stop-Process -Force -PassThru # 格式化输出已终止的进程信息 $stoppedProcesses | Select-Object Id, Name, StartTime, ExitTime | Format-Table -AutoSize
适配场景调整
- 如果你要针对指定PID列表做判断,只需要把第一步获取进程的命令替换为
$x = Get-Process -Id @(123,456,789),括号内替换为你实际要处理的PID即可 -Force参数作用是强制终止普通权限无法关闭的系统/高权限进程,不需要可以直接删除- 输出字段可按需调整,示例中默认展示进程ID、进程名、启动时间、退出时间,你可以根据需要增删Select-Object后的属性名
注意:PowerShell默认识别的进程名不带
.exe后缀,比如要终止记事本程序,进程名填notepad即可,不要写notepad.exe
简写参考
如果不需要显式保留if判断块,也可以用更简洁的过滤写法,执行逻辑和上面完全一致:
$x = Get-Process $stoppedProcesses = $x | Where-Object Name -in @("y", "z") | Stop-Process -Force -PassThru $stoppedProcesses
内容的提问来源于stack exchange,提问作者Balagadoo
相关产品推荐
相关产品推荐

