求后台监控并终止指定进程的PowerShell脚本(SCCM部署场景)
PowerShell后台进程监控与自动终止脚本
我之前帮同事解决过几乎一模一样的SCCM部署问题——安装程序末尾启动的子许可进程把整个部署脚本卡住,导致SCCM判定安装失败。下面这个脚本正好能满足你的需求:在后台持续监控目标进程,一旦它启动就立刻强制终止,确保主安装脚本可以顺利以exit 0正常结束。
完整脚本代码
# -------------------------- 配置区 -------------------------- # 替换为你要监控并终止的目标进程名称(无需加.exe后缀) $targetProcessName = "SubLicenseProcess" # 进程检查间隔(单位:秒,可根据需求调整,比如0.5秒更灵敏) $checkInterval = 1 # 是否只终止一次(设为$true则终止后停止监控,$false则持续监控) $terminateOnce = $false # ----------------------------------------------------------- # 启动后台监控任务,避免阻塞主安装流程 $monitorJob = Start-Job -ScriptBlock { param($processName, $interval, $stopAfterFirstKill) while ($true) { # 静默检查目标进程是否存在 $targetProcess = Get-Process -Name $processName -ErrorAction SilentlyContinue if ($targetProcess) { # 强制终止进程,忽略终止时的错误(比如进程已经自行退出) Stop-Process -Id $targetProcess.Id -Force -ErrorAction SilentlyContinue Write-Host "[监控任务] 已终止目标进程: $processName (PID: $($targetProcess.Id))" # 如果设置为只终止一次,就退出循环 if ($stopAfterFirstKill) { break } } # 等待指定间隔后再次检查 Start-Sleep -Seconds $interval } } -ArgumentList $targetProcessName, $checkInterval, $terminateOnce # -------------------------- 主安装流程 -------------------------- Write-Host "开始执行SCCM应用程序安装..." # 替换为你的实际安装命令(比如静默安装命令) # & "C:\Path\To\Your\MainInstaller.exe" /quiet /norestart # --------------------------------------------------------------- # 等待主安装流程完成(如果你的安装命令是阻塞式的,这一步会自动等待;如果是非阻塞,需添加等待逻辑) # 示例:等待主安装进程结束(假设主安装进程名为MainInstaller) # Wait-Process -Name "MainInstaller" -Timeout 3600 -ErrorAction SilentlyContinue # 安装完成后,停止并清理后台监控任务 Stop-Job -Job $monitorJob Remove-Job -Job $monitorJob Write-Host "监控任务已停止,安装流程正常结束" # 以exit code 0退出,告知SCCM安装成功 exit 0
关键部分说明
- 配置区:你只需要修改开头的3个参数即可适配你的场景:
$targetProcessName:填写子许可进程的名称(比如SubLicenseUI,不要加.exe)$checkInterval:调整进程扫描的间隔,数值越小监控越灵敏$terminateOnce:如果子许可进程只会启动一次,设为$true可以减少系统资源占用
- 后台监控任务:用
Start-Job启动独立的后台任务,这样监控逻辑不会阻塞主安装脚本的执行 - 强制终止进程:
Stop-Process -Force确保进程被彻底终止,避免弹出确认窗口或残留进程 - 清理任务:安装完成后一定要用
Stop-Job和Remove-Job清理后台任务,避免PowerShell残留无用的后台进程
注意事项
- 权限要求:如果目标进程是管理员权限运行的,你的PowerShell脚本也需要以管理员权限执行,否则可能无法终止进程
- 调试建议:在测试环境运行时,可以保留
Write-Host的输出,确认监控任务是否正常识别并终止目标进程 - 非阻塞安装适配:如果你的主安装命令是非阻塞的(启动后立刻返回),需要添加额外的等待逻辑,比如用
Wait-Process等待主安装进程结束,再停止监控任务
内容的提问来源于stack exchange,提问作者Craig Cobbold
相关产品推荐
相关产品推荐

