Windows 系统性能检查专家
角色定位
你是一位资深的Windows系统运维专家,负责按需执行Windows服务器的健康检查。
触发条件
当用户提出以下需求时,应主动使用本技能:
- "帮我检查一下Windows服务器性能"
- "看看Windows的CPU和内存使用情况"
- "生成一份Windows系统运维报告"
- "Windows系统好像有点卡,检查一下"
工作流程
请直接在Windows系统上创建并运行以下名为 sys_perf_check.ps1 的PowerShell脚本。该脚本集成了数据采集、状态判断和报告输出三大功能,一次性完成全部检查工作。
完整脚本代码
# ============================================================
# Windows 系统性能检查脚本(全自动一体化版本)
# 功能:采集CPU/内存/磁盘数据 -> 判断状态 -> 输出完整报告
# ============================================================
Write-Host "=== Windows 系统性能检查报告 ===" -ForegroundColor Cyan
Write-Host "检查时间: $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')"
Write-Host "主机名: $env:COMPUTERNAME"
Write-Host "操作系统: $(Get-CimInstance Win32_OperatingSystem).Caption"
# ==================== 第一步:采集数据 ====================
# 1. CPU 使用率
$cpu = Get-Counter '\Processor(_Total)\% Processor Time'
$cpuPercent = [math]::Round($cpu.CounterSamples.CookedValue, 2)
# 2. 内存使用情况
$os = Get-CimInstance Win32_OperatingSystem
$totalMem = [math]::Round($os.TotalVisibleMemorySize / 1MB, 2)
$freeMem = [math]::Round($os.FreePhysicalMemory / 1MB, 2)
$usedMem = [math]::Round($totalMem - $freeMem, 2)
$memPercent = [math]::Round(($usedMem / $totalMem) * 100, 2)
# 3. 磁盘空间
$disk = Get-CimInstance Win32_LogicalDisk -Filter "DeviceID='C:'"
$freeSpace = [math]::Round($disk.FreeSpace / 1GB, 2)
$totalSpace = [math]::Round($disk.Size / 1GB, 2)
$usedSpace = [math]::Round($totalSpace - $freeSpace, 2)
$diskPercent = [math]::Round(($usedSpace / $totalSpace) * 100, 2)
# 4. 磁盘 I/O
try {
$diskIO = Get-Counter '\PhysicalDisk(_Total)\Disk Reads/sec', '\PhysicalDisk(_Total)\Disk Writes/sec' -ErrorAction Stop
$readIO = [math]::Round($diskIO.CounterSamples[0].CookedValue, 2)
$writeIO = [math]::Round($diskIO.CounterSamples[1].CookedValue, 2)
} catch {
$readIO = "N/A(需管理员权限)"
$writeIO = "N/A(需管理员权限)"
}
# ==================== 第二步:判断状态 ====================
function Get-Status {
param($value, $warningThreshold, $dangerThreshold)
if ($value -lt $warningThreshold) { return "正常" }
elseif ($value -lt $dangerThreshold) { return "需要关注" }
else { return "危险" }
}
function Get-Suggestion {
param($status, $type)
if ($status -eq "正常") { return "无" }
if ($type -eq "cpu") {
if ($status -eq "需要关注") { return "检查CPU占用较高的进程" }
else { return "立即排查异常进程,考虑扩容" }
}
if ($type -eq "memory") {
if ($status -eq "需要关注") { return "检查内存泄漏,考虑增加物理内存" }
else { return "立即排查内存占用,紧急扩容" }
}
if ($type -eq "disk") {
if ($status -eq "需要关注") { return "清理临时文件,考虑扩展分区" }
else { return "立即清理空间,紧急扩容" }
}
}
$cpuStatus = Get-Status -value $cpuPercent -warningThreshold 70 -dangerThreshold 90
$memStatus = Get-Status -value $memPercent -warningThreshold 80 -dangerThreshold 95
$diskStatus = Get-Status -value $diskPercent -warningThreshold 80 -dangerThreshold 90
$cpuSuggestion = Get-Suggestion -status $cpuStatus -type "cpu"
$memSuggestion = Get-Suggestion -status $memStatus -type "memory"
$diskSuggestion = Get-Suggestion -status $diskStatus -type "disk"
# ==================== 第三步:输出报告 ====================
Write-Host "`n"
Write-Host "# Windows 系统性能检查报告" -ForegroundColor Cyan
Write-Host "**检查时间**:$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')`n"
# CPU 部分
Write-Host "## 1. CPU 性能" -ForegroundColor Yellow
Write-Host "- **占用率**:${cpuPercent}%"
Write-Host "- **状态**:$cpuStatus"
Write-Host "- **建议**:$cpuSuggestion"
# 内存部分
Write-Host "`n## 2. 内存性能" -ForegroundColor Yellow
Write-Host "- **总内存**:${totalMem}GB"
Write-Host "- **已用内存**:${usedMem}GB"
Write-Host "- **可用内存**:${freeMem}GB"
Write-Host "- **使用率**:${memPercent}%"
Write-Host "- **状态**:$memStatus"
Write-Host "- **建议**:$memSuggestion"
# 磁盘部分
Write-Host "`n## 3. 磁盘性能" -ForegroundColor Yellow
Write-Host "- **C盘总空间**:${totalSpace}GB"
Write-Host "- **C盘已用空间**:${usedSpace}GB"
Write-Host "- **C盘可用空间**:${freeSpace}GB"
Write-Host "- **C盘使用率**:${diskPercent}%"
Write-Host "- **磁盘读IOPS**:$readIO"
Write-Host "- **磁盘写IOPS**:$writeIO"
Write-Host "- **状态**:$diskStatus"
Write-Host "- **建议**:$diskSuggestion"
# 总结
Write-Host "`n## 总结" -ForegroundColor Green
if ($cpuStatus -eq "正常" -and $memStatus -eq "正常" -and $diskStatus -eq "正常") {
Write-Host "系统整体运行状态良好。" -ForegroundColor Green
} else {
$issueCount = 0
if ($cpuStatus -ne "正常") { $issueCount++ }
if ($memStatus -ne "正常") { $issueCount++ }
if ($diskStatus -ne "正常") { $issueCount++ }
Write-Host "系统存在 $issueCount 项需要关注的问题,请根据上述建议进行处理。" -ForegroundColor Yellow
}