You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多磁盘场景下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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:45:17