PowerShell可通过原生命令监控Windows服务器磁盘阵列健康状态:先用Get-PhysicalDisk查物理盘健康,再逐层验证Storage Pool、Virtual Disk及Volume;硬件RAID需厂商驱动支持WMI查询,如Dell PERC或HPE SSA;脚本可自动告警异常。
powershell 可以直接查询和监控 windows 服务器上的磁盘阵列健康状态,前提是系统使用的是 windows storage spaces、硬件 raid 控制器(如 dell perc、hp smart array)或支持 s.m.a.r.t. 的直连 nvme/sata ssd/hdd。关键不在于“有没有阵列”,而在于“是否被 windows 存储子系统识别并上报健康数据”。
确认阵列是否被系统识别为物理磁盘
运行以下命令查看所有物理磁盘及其基础健康状态:
Get-PhysicalDisk | Select-Object FriendlyName, MediaType, HealthStatus, OperationalStatus, Usage
若输出中出现多块磁盘且 HealthStatus 显示 Healthy、Unhealthy 或 Unknown,说明 Windows 已通过存储驱动(如 storport、msahci 或厂商驱动)获取了阵列成员盘的底层反馈。若全为空或仅显示“Unknown”,可能是 RAID 卡未启用健康透传(需在 BIOS/UEFI 或 RAID 管理工具中开启 “SMART Pass-through” 或 “Predictive Failure Analysis”)。
检查存储池与虚拟磁盘层级健康
对于使用 Storage Spaces 构建的软件定义阵列,必须逐层验证:
-
存储池(Storage Pool):运行
Get-StoragePool | Select-Object FriendlyName, HealthStatus, OperationalStatus。HealthStatus 为 Healthy 表示池结构正常;若为 Unhealthy,说明已有物理盘离线或冗余失效。 -
虚拟磁盘(Virtual Disk):运行
Get-VirtualDisk | Select-Object FriendlyName, HealthStatus, OperationalStatus, ResiliencySettingName。重点关注 HealthStatus 和 ResiliencySettingName(如 Mirror、Parity),确保未出现降级(Degraded)或已失败(Failed)状态。 -
关联卷(Volume):用
Get-Volume | Where-Object {$_.FileSystemLabel -like "*RAID*"} | Select-Object DriveLetter, HealthStatus, SizeRemaining快速定位阵列映射出的卷是否可访问、是否有空间异常。
读取 RAID 控制器原生健康状态(需驱动支持)
部分企业级 RAID 卡(如 Dell、HPE、Lenovo)提供 WMI 接口供 PowerShell 调用。例如:
- Dell PERC 卡(安装 Dell OpenManage Server Administrator 后):
Get-WmiObject -Namespace root\dcim\sysman -Class DCIM_RAIDService或查询DCIM_PhysicalDiskView类获取 PredictFailure、State、FailurePredicted 等字段。 - HPE Smart Array(安装 HPE SSA Cmdlets 后):
Get-SSAPhysicalDrive | Select-Object Model, Status, PredictedFailure。 - 通用方法(适用于多数支持 S.M.A.R.T. 透传的控制器):
Get-WmiObject -Namespace root\wmi -Class MSStorageDriver_FailurePredictStatus | Select-Object InstanceName, PredictFailure。若 PredictFailure 为 True,表明任意一块成员盘已被固件判定为高风险,需立即干预。
设置阵列健康告警脚本(轻量实用版)
将以下逻辑保存为 Check-RAIDHealth.ps1,配合任务计划每15分钟运行一次:
# 检查物理盘
$badDisks = Get-PhysicalDisk | Where-Object { $_.HealthStatus -ne 'Healthy' -or $_.OperationalStatus -ne 'OK' }
if ($badDisks) {
Write-Warning "发现异常物理盘:$($badDisks.FriendlyName -join '; '),状态:$($badDisks.HealthStatus -join ', ')"
}
<h1>检查存储池</h1><p>$unhealthyPools = Get-StoragePool | Where-Object { $_.HealthStatus -ne 'Healthy' }
if ($unhealthyPools) {
Write-Warning "存储池异常:$($unhealthyPools.FriendlyName -join '; '),请检查冗余状态"
}</p><h1>检查虚拟磁盘</h1><p>$degradedVDs = Get-VirtualDisk | Where-Object { $_.HealthStatus -ne 'Healthy' }
if ($degradedVDs) {
Write-Warning "虚拟磁盘降级:$($degradedVDs.FriendlyName -join '; '),类型:$($degradedVDs.ResiliencySettingName -join ', ')"
}</p>该脚本不依赖第三方工具,只调用系统原生命令,输出清晰,可直接重定向到日志或集成进邮件通知流程(如添加 Send-MailMessage)。对硬件 RAID,建议同步部署厂商提供的 CLI 工具(如 omconfig 或 ssacli)作交叉验证。

















