返回

Windows Server如何使用PowerShell监控服务器资源?CPU、内存、磁盘和网络监控教程

2026-11-12 Windows Server PowerShell 5 0

Windows Server自带任务管理器和性能监视器,可以查看服务器的资源使用情况。不过,如果需要定期采集服务器性能数据、自动发现资源异常,或者同时监控多台服务器,使用PowerShell会更加方便。

PowerShell提供了丰富的系统管理命令,不需要安装第三方软件,就能监控CPU、内存、磁盘和网络等关键指标。下面介绍几种常用方法。

查看CPU使用率

可以使用Get-Counter读取Windows性能计数器,实时获取CPU使用情况。

Get-Counter '\Processor(_Total)\% Processor Time' -SampleInterval 2 -MaxSamples 5

这条命令每隔2秒采集一次CPU使用率,总共采集5次。

如果想查看当前占用CPU最高的进程,可以使用:

Get-Process | Sort-Object CPU -Descending |
Select-Object -First 10 Name, Id, CPU

这里的CPU表示进程累计使用的处理器时间,并非当前CPU占用百分比,但可以帮助定位长期消耗CPU资源的进程。

监控内存使用情况

使用Get-CimInstance可以获取服务器物理内存信息:

$memory = Get-CimInstance Win32_OperatingSystem

$total = $memory.TotalVisibleMemorySize
$free = $memory.FreePhysicalMemory
$used = $total - $free

[PSCustomObject]@{
    TotalGB = [math]::Round($total / 1MB, 2)
    UsedGB  = [math]::Round($used / 1MB, 2)
    FreeGB  = [math]::Round($free / 1MB, 2)
    Usage   = [math]::Round($used / $total * 100, 2)
}

通过这段代码,可以直观地看到物理内存总量、已使用内存、剩余内存和使用率。

如果发现内存使用率长期偏高,可以进一步查看占用内存较多的进程:

Get-Process |
Sort-Object WorkingSet64 -Descending |
Select-Object -First 10 Name, Id,
@{Name='Memory(MB)';Expression={[math]::Round($_.WorkingSet64 / 1MB, 2)}}

查看磁盘空间

服务器磁盘空间不足,可能导致数据库、网站和日志服务出现异常。

使用以下命令查看所有磁盘的容量:

Get-CimInstance Win32_LogicalDisk -Filter "DriveType=3" |
Select-Object DeviceID,
@{Name='TotalGB';Expression={[math]::Round($_.Size / 1GB, 2)}},
@{Name='FreeGB';Expression={[math]::Round($_.FreeSpace / 1GB, 2)}},
@{Name='Usage';Expression={[math]::Round((1 - $_.FreeSpace / $_.Size) * 100, 2)}}

如果还需要监控磁盘读写性能,可以使用:

Get-Counter '\PhysicalDisk(_Total)\Disk Reads/sec',
'\PhysicalDisk(_Total)\Disk Writes/sec'

这样可以了解磁盘每秒读写操作次数,辅助判断磁盘是否存在性能瓶颈。

监控网络流量

网络监控可以帮助判断服务器是否存在异常流量或者带宽占用过高的问题。

查看网络适配器信息:

Get-NetAdapter

查看网络接口的流量统计:

Get-NetAdapterStatistics

如果需要持续观察网络流量,可以结合Get-Counter:

Get-Counter '\Network Interface(*)\Bytes Total/sec' -Continuous

按Ctrl+C即可停止监控。

将监控数据导出为CSV

如果希望长期记录服务器资源变化,可以定期采集数据并保存为CSV文件,方便后续使用Excel分析。

例如,下面的脚本每隔10秒采集一次CPU使用率,并记录时间:

$log = "C:\ServerMonitor.csv"

while ($true) {
    $cpu = (Get-Counter '\Processor(_Total)\% Processor Time').CounterSamples.CookedValue

    [PSCustomObject]@{
        Time = Get-Date -Format 'yyyy-MM-dd HH:mm:ss'
        CPU  = [math]::Round($cpu, 2)
    } | Export-Csv $log -Append -NoTypeInformation -Encoding UTF8

    Start-Sleep -Seconds 10
}

将脚本保存为Monitor.ps1并运行,就可以持续记录CPU使用率。后续还可以加入内存、磁盘空间和网络流量指标,建立更完整的监控日志。

总结

PowerShell为Windows Server提供了比较完善的资源监控能力。通过Get-Counter、Get-Process、Get-CimInstance等命令,可以快速掌握服务器的CPU、内存、磁盘和网络运行情况。

对于需要长期运行的网站、数据库和应用服务器,建议将监控脚本设置为计划任务,定期采集数据。当CPU持续过高、内存不断增长或者磁盘空间接近耗尽时,及时发出告警,可以减少服务器故障对业务的影响。

顶部