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

如何实现PowerShell内存告警时进程列表的缩进格式化?

解决PowerShell内存检查脚本的进程列表缩进问题

问题根源

你当前通过Out-String将进程列表转为多行字符串后直接拼接输出,导致只有第一行会跟随日志前缀的格式,后续行没有统一缩进,最终格式混乱。

修复方案

通过对进程列表的每一行添加统一缩进,并优化输出逻辑,实现对齐效果:

完整修改代码

Function Get-Memory{
    $CompObject = Get-CIMInstance -Class WIN32_OperatingSystem
    $Memory = ((($CompObject.TotalVisibleMemorySize - $CompObject.FreePhysicalMemory)*100)/ $CompObject.TotalVisibleMemorySize)
    $Memory.ToString("#.##")
}

# 获取Top5高内存进程
$highMemProcesses = Get-Process | 
    Sort-Object -Property ws -Descending | 
    Group-Object -Property ProcessName | 
    Select-Object -First 5 Count, Name, @{Name='Memoryusage(Total)';Expression={'{0:N3}MB' -f (($_.Group | Measure-Object WorkingSet -Sum).Sum / 1MB)}}

# 给进程列表每行添加缩进(8个空格,与日志前缀对齐)
$highMemUsage = $highMemProcesses | Format-Table -AutoSize | Out-String | ForEach-Object {
    if ($_.Trim() -ne '') { "        $_" } else { $_ }
}

# 转换为数值类型避免字符串比较错误
$ram = [double]Get-Memory
if ($ram -ge 90) {
    Write-Host "[ MEMORY ]    : [ FAIL ] : Server MEMORY utilization $($ram)%"
    Write-Host "[ MEMORY ]    : [ INFO  ] : Top 5 high memory utilization processes:"
    Write-Host $highMemUsage
} elseif ($ram -gt 80 -and $ram -lt 90) {
    Write-Host "[ MEMORY ]    : [ WARN ] : Server MEMORY utilization $($ram)%"
    Write-Host "[ MEMORY ]    : [ INFO  ] : Top 5 high memory utilization processes:"
    Write-Host $highMemUsage
} else {
    Write-Host "[ MEMORY ]    : [ GOOD ] : Server MEMORY utilization $($ram)%"
}

关键修改点

  1. 修复类型比较问题:将$ram转为[double]类型,避免原字符串类型导致的比较逻辑错误(比如字符串"90"和"85"的比较结果不符合预期)
  2. 统一缩进处理:通过ForEach-Object给进程列表的每一行非空内容添加8个空格缩进,与日志前缀的格式对齐
  3. 拆分输出结构:将进程列表的标题和内容分开输出,避免拼接时的格式错乱,让日志结构更清晰

最终效果示例

[ MEMORY ]    : [ WARN ] : Server MEMORY utilization 85.23%
[ MEMORY ]    : [ INFO  ] : Top 5 high memory utilization processes:
        Count Name          Memoryusage(Total)
        ----- ----          ------------------
            3 chrome        1245.678MB
            2 explorer      890.123MB
            1 sqlservr      765.456MB
            1 firefox       654.321MB
            1 svchost       432.100MB

内容的提问来源于stack exchange,提问作者Faisal Mohammed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:30:49