You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求Windows下可终止超阈值CPU/内存占用进程的PowerShell脚本

Windows PowerShell 脚本:终止高资源占用进程

以下是针对Windows环境的PowerShell脚本,可根据指定的CPU/内存阈值终止进程,适配RMM工具触发场景:

完整脚本

param(
    # CPU占用率阈值(相对于总CPU资源的百分比,例如90=90%总CPU)
    [int]$CpuThresholdPercent = 90,
    # 内存占用阈值(MB)
    [int]$MemoryThresholdMB = 2048,
    # 排除的进程名列表(避免终止系统关键进程)
    [array]$ExcludedProcessNames = @("svchost", "explorer", "winlogon", "csrss", "smss"),
    # 是否仅输出匹配进程而不终止(测试用)
    [switch]$WhatIf
)

# 获取系统核心数,用于修正CPU使用率计算
$coreCount = [Environment]::ProcessorCount

# 获取所有进程的实时CPU使用率
$cpuCounters = Get-Counter "\Process(*)\% Processor Time" -ErrorAction SilentlyContinue | 
    Select-Object -ExpandProperty CounterSamples |
    Where-Object { $_.InstanceName -notmatch "^(_total|idle)$" } |
    ForEach-Object {
        # 修正CPU使用率为总CPU百分比(进程原始CPU值/核心数)
        $correctedCpu = [math]::Round($_.CookedValue / $coreCount, 2)
        # 处理进程实例名(如chrome#1 → chrome)
        $processName = $_.InstanceName -replace "#\d+$", ""
        [PSCustomObject]@{
            ProcessName = $processName
            CpuPercent  = $correctedCpu
        }
    }

# 获取所有进程的内存占用及进程ID
$processes = Get-Process -ErrorAction SilentlyContinue |
    Select-Object Id, Name, @{Name="MemoryMB"; Expression={[math]::Round($_.WorkingSet64 / 1MB, 2)}}

# 关联CPU和内存数据,筛选符合终止条件的进程
$targetProcesses = @()
foreach ($cpuEntry in $cpuCounters) {
    $matchingProcesses = $processes | Where-Object { $_.Name -eq $cpuEntry.ProcessName }
    if ($matchingProcesses) {
        foreach ($proc in $matchingProcesses) {
            if ($proc.Name -notin $ExcludedProcessNames -and 
                ($cpuEntry.CpuPercent -ge $CpuThresholdPercent -or $proc.MemoryMB -ge $MemoryThresholdMB)) {
                $targetProcesses += [PSCustomObject]@{
                    Id          = $proc.Id
                    Name        = $proc.Name
                    CpuPercent  = $cpuEntry.CpuPercent
                    MemoryMB    = $proc.MemoryMB
                }
            }
        }
    }
}
# 去重(避免同一进程多次匹配)
$targetProcesses = $targetProcesses | Select-Object Id, Name, CpuPercent, MemoryMB -Unique

if ($targetProcesses.Count -eq 0) {
    Write-Host "未找到符合阈值条件的进程"
    exit 0
}

Write-Host "找到符合终止条件的进程:"
$targetProcesses | Format-Table -AutoSize

# 终止进程
foreach ($proc in $targetProcesses) {
    try {
        $process = Get-Process -Id $proc.Id -ErrorAction Stop
        if ($WhatIf) {
            Write-Host "【测试模式】将终止进程:$($proc.Name) (ID: $($proc.Id))"
        } else {
            $process | Stop-Process -Force -ErrorAction Stop
            Write-Host "已成功终止进程:$($proc.Name) (ID: $($proc.Id))"
        }
    } catch {
        Write-Warning "无法终止进程 $($proc.Name) (ID: $($proc.Id)):$_"
    }
}

关键说明

  • CPU使用率修正:通过系统性能计数器获取实时CPU数据,自动根据核心数转换为总CPU百分比,避免多核心环境下的数值偏差
  • 参数可定制:RMM工具可直接传入自定义阈值、排除进程列表,无需修改脚本本体
  • 安全防护:默认排除系统关键进程,可通过ExcludedProcessNames参数扩展保护范围
  • 测试验证:添加-WhatIf参数可预览待终止进程,避免误操作

使用注意事项

  1. 需以管理员权限运行脚本,否则无法终止部分系统进程
  2. RMM配置时需提前完成持续时长检测(脚本仅处理当前符合阈值的进程)
  3. 正式部署前建议用-WhatIf参数在测试环境验证逻辑
  4. 可添加日志输出(如Out-File -FilePath "C:\ProcessTermination.log" -Append)便于问题排查

内容的提问来源于stack exchange,提问作者Mario Lopez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 04:06:26