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

PowerShell导出Storport健康事件日志到Excel报错求助

解决PowerShell导出事件日志数据到Excel/CSV的错误问题

错误原因

你赋值给Excel单元格的$BootDevice是一个XML节点对象,并非单纯的字符串值。Excel的COM组件无法直接解析这种复杂对象,因此抛出0x800A03EC错误。必须提取节点内的#text属性(也就是实际的true/false值)再进行赋值。

修复后的Excel COM代码

$Myexcel = New-Object -ComObject excel.application
$Myexcel.visible = $true
$Myworkbook = $Myexcel.workbooks.add()
$Sheet1 = $Myworkbook.worksheets.item(1)
$Sheet1.name = "summary"
$Sheet1.cells.item(1,1) = 'BootDevice'

$events = Get-WinEvent -FilterHashtable @{logname="Microsoft-Windows-Storage-Storport/Health"; id=511}

# 提取BootDevice的纯文本值
$event = [xml]$events[0].ToXml()
$BootDeviceValue = ($event.Event.EventData.Data | Where-Object {$_.name -eq "BootDevice"}).#text

# 将纯值写入单元格
$Sheet1.cells.item(2,1) = $BootDeviceValue
$Sheet1.Columns.AutoFit()

$Myfile = 'E:\tmp\test.csv'
$Myworkbook.Saveas($Myfile)
$Myexcel.displayalerts = $true

# 释放Excel资源(避免后台残留进程)
$Myexcel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($Myexcel) | Out-Null

更简便的原生导出方案(无需Excel)

PowerShell自带的Export-Csv命令更高效,无需依赖Excel COM组件,避免兼容性问题:

$events = Get-WinEvent -FilterHashtable @{logname="Microsoft-Windows-Storage-Storport/Health"; id=511}

# 构造结构化输出对象
$exportData = [PSCustomObject]@{
    BootDevice = ([xml]$events[0].ToXml()).Event.EventData.Data.Where({$_.name -eq "BootDevice"}).#text
}

# 导出到CSV
$exportData | Export-Csv -Path 'E:\tmp\test.csv' -NoTypeInformation -Encoding UTF8

扩展说明

如果需要处理多个事件,可以通过循环遍历$events数组,批量提取并写入数据:

# 示例:遍历所有事件并导出到Excel
$row = 2
foreach ($eventItem in $events) {
    $xmlEvent = [xml]$eventItem.ToXml()
    $bootVal = ($xmlEvent.Event.EventData.Data | Where-Object {$_.name -eq "BootDevice"}).#text
    $Sheet1.cells.item($row,1) = $bootVal
    $row++
}

内容的提问来源于stack exchange,提问作者shubham kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 23:45:38