通过VBScript关闭除指定排除项外的所有运行进程方案咨询
VBS内嵌PowerShell实现终止所有进程仅保留指定排除项
注意事项
请务必先在测试环境验证排除列表配置,错误终止系统关键进程可能导致系统崩溃、数据丢失。建议默认将系统核心进程(如
svchost.exe、lsass.exe、csrss.exe、wininit.exe等)、桌面进程explorer.exe、以及需要保留的业务进程加入排除列表。
完整实现代码
Dim WshShell, excludeList Set WshShell = CreateObject("WScript.Shell") ' --------------------------配置区-------------------------- ' 自定义需要保留的进程列表,多个进程用英文逗号分隔 excludeList = "svchost.exe,lsass.exe,csrss.exe,wininit.exe,explorer.exe,wscript.exe,powershell.exe" ' ---------------------------------------------------------- ' 构造完全内嵌的PowerShell命令,无外部.ps1文件调用 psCommand = "powershell.exe -ExecutionPolicy Bypass -Command ""$excludeArr = @('" & Replace(excludeList, ",", "','") & "'); Get-Process | Where-Object { $excludeArr -notcontains ($_.ProcessName + '.exe') } | ForEach-Object { Stop-Process -Id $_.Id -Force -ErrorAction SilentlyContinue }""" ' 执行命令:参数0表示隐藏运行窗口,True表示等待命令执行完成再继续 WshShell.Run psCommand, 0, True ' 释放对象 Set WshShell = Nothing
代码说明
- 排除列表可直接修改
excludeList配置项,按照现有格式新增/删除需要保留的进程名即可 - 自带运行环境适配:添加
-ExecutionPolicy Bypass参数绕过Win10默认的PowerShell执行策略限制,无需提前修改系统配置 - 自带防误杀逻辑:默认保留当前VBS运行进程
wscript.exe和PowerShell执行进程powershell.exe,避免脚本运行中断 - 执行逻辑和原VBS效果一致:强制终止进程,无弹窗提示,无权限操作的进程自动忽略报错
预验证方法
如果需要提前确认待终止的进程范围避免误操作,可临时替换psCommand为以下内容,执行后会将所有待关闭的进程列表输出到C:\process_check.txt,确认无误后再换回终止命令即可:
psCommand = "powershell.exe -ExecutionPolicy Bypass -Command ""$excludeArr = @('" & Replace(excludeList, ",", "','") & "'); Get-Process | Where-Object { $excludeArr -notcontains ($_.ProcessName + '.exe') } | Select-Object ProcessName,Id | Out-File C:\process_check.txt -Encoding UTF8"""
内容的提问来源于stack exchange,提问作者Brian
相关产品推荐
相关产品推荐

