PowerShell中如何让PSCustomObject输出多块物理磁盘的正确信息
PowerShell多磁盘信息导出脚本修复方案
修复后完整代码
# 初始化磁盘信息结果数组 $DiskResults = @() # 遍历所有识别到的物理磁盘 foreach ($singleDisk in Get-PhysicalDisk) { # 匹配当前磁盘对应的可靠性计数器,无对应数据时忽略报错 $diskReliability = Get-Disk -Number $singleDisk.DeviceId | Get-StorageReliabilityCounter -ErrorAction SilentlyContinue # 生成单块磁盘的信息对象 $currentDiskInfo = [PSCustomObject]@{ 'Device ID' = $singleDisk.DeviceID 'Model' = $singleDisk.Model 'Serial Number' = $singleDisk.SerialNumber 'Connector Type' = $singleDisk.BusType 'Disk Type' = $singleDisk.MediaType 'Health Status' = $singleDisk.HealthStatus 'Size' = '{0:n0} GB' -f ($singleDisk.Size / 1GB) 'PowerOnHours' = $diskReliability.PowerOnHours 'Read Errors' = $diskReliability.ReadErrorsUncorrected 'Wear' = $diskReliability.Wear 'Temperature' = $diskReliability.Temperature } $DiskResults += $currentDiskInfo } # 转换为JSON格式,Depth参数避免属性截断 $DiskResults | ConvertTo-Json -Depth 3
核心修改说明
- 新增循环遍历逻辑,逐块处理物理磁盘,避免多磁盘场景下整体操作数组触发运算错误
- 单块磁盘单独匹配对应的可靠性计数器,避免多磁盘属性匹配错乱
- 新增
-ErrorAction SilentlyContinue参数,处理U盘等无可靠性计数器的设备时不会触发额外报错,无数据的属性自动返回null,符合预期输出 - 转JSON时新增
-Depth 3参数,避免嵌套属性被截断
格式调整说明
默认输出为标准JSON数组格式,会在外层包裹[],如果你需要和示例完全一致的无外层括号格式,可以将最后一行替换为:
($DiskResults | ConvertTo-Json -Depth 3).Trim('[]').Trim()
内容的提问来源于stack exchange,提问作者KyleJackDaniels
相关产品推荐
相关产品推荐

