我一直习惯在新装的 Windows 上额外装一堆第三方软件来兜底,像任务管理器替代品、端口扫描器、网络追踪工具,还有 CrystalDiskInfo 这类专用小工具。目标就是要把系统看得透透的。但这么一来,我最后搞出来的后台服务和臃肿程度,比我愿意承认的还多。
让我彻底醒悟的是,我发现 Windows PowerShell 几乎能搞定我之前装的所有第三方系统监控工具。这些 PowerShell 诊断命令成了我管电脑、盯性能的得力帮手,下面我就给你看看它们到底是怎么用的。
Get-Counter:你的内置监控代理
看看你的系统到底在干啥
在我开始用 Get-Counter 之前,我用的是 XMeters,一个任务栏系统监控工具。它就待在系统托盘里,盯着 CPU 和内存的占用情况。这工具自带后台服务和更新计划,还会拖慢开机速度,尤其是在配置不高的设备上。
直接用 PowerShell 里的 Get-Counter 就能替换掉这个工具。不用装任何额外东西,Get-Counter 就能读取处理器负载、可用内存和磁盘活动。你可以自己设定刷新的时间间隔。我一般会跑这么一条命令:
Get-Counter '\Processor(_Total)\% Processor Time','\Memory\Available MBytes' -SampleInterval 2 -MaxSamples 30
这条命令会每隔两秒采一次数,一共采 30 次。就这么一条命令,就能给你 60 秒的实时数据一览。我还能加上 Export-Csv 命令把结果存下来,立马就有自己的性能日志了,根本不用装多余软件:
| Export-Csv -Path "$env:USERPROFILE\Desktop\cpu_log.csv" -NoTypeInformation
运行命令 Get-Counter -ListSet * 可以浏览 Windows 跟踪的所有类别。
Get-Process:比在任务管理器里点来点去强多了
快速找到罪魁祸首
如果你用 Windows,那你肯定熟悉任务管理器——问题在于,当电脑卡住时,我不想为了找个红色数字还得在菜单或选项卡里翻来翻去。我更想一下就找到它然后干掉它。
以下是我更愿意运行的命令:
Get-Process | Sort-Object WorkingSet64 -Descending | Select-Object -First 10 Name, Id, @{Name='RAM_MB';Expression={[math]::Round($_.WorkingSet64/1MB,1)}}
这条命令会按内存占用大小排好序,把我电脑上最吃内存的前 10 个进程列出来。然后我就能用下面这条命令,一条流水线就把卡死的进程干掉:
Get-Process -Name "Chrome" | Where-Object {$_.Responding -eq $false} | Stop-Process -Force
你可以把上面命令里的 Chrome 换成任何你想结束的进程。这样就不用再滚动鼠标或干等任务管理器反应过来了。
-Responding 属性表示程序是否正在与 Windows 交互(True)或未交互(False),所以用它来检测挂起的进程特别管用。如果程序没反应,它会返回 False,命令就会自动强制结束它。这相当于用代码来结束进程,平时这活儿得点好几下鼠标才能搞定。
您可以通过在 Select-Object 调用中添加 StartTime 来查看进程启动的确切日期和时间。如果一个进程已经跑了两周还占着 2GB 内存,那你就得好好查查了。
Test-NetConnection:一条命令顶仨工具
更快地诊断网络问题
以前我查网络问题总是东一榔头西一棒子。我使用内置的 ping、tracert(路由追踪)和 一个轻量级端口扫描器。现在,Test-NetConnection 替代了这三个工具。下面这几条命令分别能告诉我:主机通不通、端口开没开、连接卡在哪儿:
Test-NetConnection -ComputerName google.com -InformationLevel Detailed
Test-NetConnection -ComputerName 192.168.1.1 -Port 443
Test-NetConnection -ComputerName 8.8.8.8 -TraceRoute
Test-NetConnection 的输出非常清晰明了。当你运行端口检查命令时,输出的最后一行显示 TcpTestSucceeded : True(或 False)。这种清晰的输出让它很容易用在自动化脚本里。我设了循环来悄悄检查连接,并在该值为 False 时记录警告。
Get-WinEvent:完全跳过事件查看器
几秒就能找到崩溃和错误
我一直认为事件查看器是一个技术上实用,但实际使用起来却很糟糕的工具。它加载缓慢,并且将许多元素埋藏在菜单深处。它真让人不想去探索。
与其使用它,当有东西崩溃或出问题时,我会运行以下查询:
Get-WinEvent -FilterHashtable @{
LogName = 'System'
Level = 1,2
StartTime = (Get-Date).AddHours(-24)
} | Select-Object TimeCreated, Id, LevelDisplayName, Message | Format-List
不用等加载界面,也不用受事件查看器那堆破事的气,这命令就能把过去24小时里所有严重系统事件列出来,精确到毫秒。级别1是严重,级别2是错误。
你只要在后面加上 | Group-Object Id | Sort-Object Count -Descending,就能看出哪个错误ID出现得最勤。同一个错误蹦出来300次,跟300个不同的错误各蹦一次,这俩情况完全不是一回事。
Get-StorageReliabilityCounter:SSD 健康状态已内置
在驱动器发生故障前了解其状况
我认识的老玩家几乎都用 CrystalDiskInfo。这工具做得很棒,是检查 SSD 健康状况最靠谱的办法之一。其实 Windows 早就记着这些数据了,你只要在支持的硬盘上以管理员身份跑一下下面的命令就能看到:
Get-PhysicalDisk | Get-StorageReliabilityCounter | Select-Object DeviceId, Temperature, Wear, ReadErrorsTotal, PowerOnHours
Wear 这个值就是告诉你硬盘的额定寿命已经消耗了多少。它显示的是数字而不是颜色,这样我就能拿这个数字来写个警报脚本。比如说,如果下面这条命令返回了任何结果(也就是 Wear > 80 的硬盘),那就说明我得赶紧认真做备份了:
Get-PhysicalDisk | Get-StorageReliabilityCounter | Where-Object {$_.Wear -gt 80} | Select-Object DeviceId, Wear
少装软件,照样看得清清楚楚
最让我意外的是,我装的不少监控软件,说白了就是把 Windows 本来就能显示的东西再显示一遍。靠这五个诊断功能,我就能搞定性能监控、进程管理、网络排障、日志分析和硬盘健康。第三方工具我还是会用,但除非它们真有独门绝技,不然我不碰。
热门跟贴