多磁盘场景下PowerShell磁盘状态检测脚本异常排查请求
解决多硬盘场景下PowerShell磁盘信息脚本异常问题
看起来你遇到的问题核心是移除-Filter "DriveType=3"后,脚本获取到了非固定磁盘类型的逻辑盘(比如可移动磁盘、空光驱、网络映射盘等),这些设备往往没有Size或FreeSpace属性(比如空光驱的Size值为$null),导致拼接HTML表格时出现异常。另外,Get-WmiObject已经被微软标记为过时,推荐用Get-CimInstance替代,兼容性和性能更优。
修复后的脚本片段
foreach ($servidor in $servidores) { # 尝试连接目标服务器并获取磁盘信息,捕获连接异常 try { $diskinfo = Get-CimInstance Win32_LogicalDisk -ComputerName $servidor -ErrorAction Stop | Select-Object DeviceID, Size, FreeSpace, DriveType | # 过滤掉无容量信息的磁盘(可选,根据需求调整) Where-Object { $_.Size -ne $null } foreach ($disk in $diskinfo) { # 处理空值,将null转换为友好提示,同时转换容量单位为GB $totalSize = if ($disk.Size) { [math]::Round($disk.Size / 1GB, 2) } else { "无数据" } $availableSpace = if ($disk.FreeSpace) { [math]::Round($disk.FreeSpace / 1GB, 2) } else { "无数据" } $i += "<tr>" $i += "<td>$servidor</td>" $i += "<td>$($disk.DeviceID)</td>" $i += "<td>$totalSize GB</td>" $i += "<td>$availableSpace GB</td>" $i += "</tr>" } } catch { # 服务器连接失败时,在表格中添加错误提示行 $i += "<tr>" $i += "<td>$servidor</td>" $i += "<td colspan='3'>连接失败:$($_.Exception.Message)</td>" $i += "</tr>" } }
关键改动说明
- 替换为
Get-CimInstance:微软官方推荐的WMI替代工具,支持更多现代PowerShell特性,错误处理更灵活。 - 空值过滤/处理:
- 用
Where-Object { $_.Size -ne $null }过滤掉无容量的设备(比如空光驱),避免后续处理出错;如果需要保留这些设备,可移除这一行,仅保留空值转换逻辑。 - 对
Size和FreeSpace做空值判断,将$null转换为"无数据",同时把字节单位转换为GB,提升可读性。
- 用
- 异常捕获:添加
try/catch块处理服务器连接失败的情况,避免脚本中途崩溃,同时在HTML表格中直观显示错误信息。
内容的提问来源于stack exchange,提问作者SheZz0
相关产品推荐
相关产品推荐

