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

PowerShell处理邮件转换CSV时列值显示System.Object[]问题

解决PowerShell处理CSV时列显示System.Object[]的问题

问题出在你用Where-Object提取设备数量的逻辑上:Where-Object返回的是数组对象,哪怕只匹配到一个结果,它依然是长度为1的数组。当把数组赋值给自定义对象的属性后,Export-Csv会将数组的类型名System.Object[]输出,而非你需要的具体数值。

修正方案(两种可选)

方案1:直接取数组的第一个元素

在每个设备数量变量后面加[0],确保拿到单个数值:

$functionalDevices = (($components | Where-Object {$_ -match "Functional Devices=\d+" }) -replace "Functional Devices=", "")[0]
$NotfunctionalDevices = (($components | Where-Object {$_ -match "Not Functional Devices=\d+" }) -replace "Not Functional Devices=", "")[0]
$TotalDevices = (($components | Where-Object {$_ -match "Total Devices=\d+" }) -replace "Total Devices=", "")[0]

方案2:用正则直接提取(更高效简洁)

不需要拆分后再过滤,直接对单行文本用正则匹配提取数值:

$functionalDevices = if ($data[$i+1] -match "Functional Devices=(\d+)") { $matches[1] }
$NotfunctionalDevices = if ($data[$i+1] -match "Not Functional Devices=(\d+)") { $matches[1] }
$TotalDevices = if ($data[$i+1] -match "Total Devices=(\d+)") { $matches[1] }

额外优化:简化Site字段的替换逻辑

你原来写了9个重复的-replace,可以用正则一次性匹配所有Midtier服务器:

$siteSelection = $data[$i] -replace 'Midtier: lcahncr\d+\.lcahncrkc\.net Site selection: ', ''

完整修正后的代码

$inputcsv = 'C:\Users\Testing\04052024\4032024 DTV Report input.csv'
$outputcsv = 'C:\Users\Testing\04052024\4052024 724 Report Output1122.csv'
$data = Get-Content $inputcsv
$parsedData = @()

for ($i = 0; $i -lt $data.Count; $i += 2) {
    # 简化Site字段的正则替换
    $siteSelection = $data[$i] -replace 'Midtier: lcahncr\d+\.lcahncrkc\.net Site selection: ', ''

    # 用正则直接提取各设备数量
    $functionalDevices = if ($data[$i+1] -match "Functional Devices=(\d+)") { $matches[1] }
    $NotfunctionalDevices = if ($data[$i+1] -match "Not Functional Devices=(\d+)") { $matches[1] }
    $TotalDevices = if ($data[$i+1] -match "Total Devices=(\d+)") { $matches[1] }

    $parsedObject = [PSCustomObject]@{
        Site= $siteSelection
        "Functional Devices" = $functionalDevices
        "Not Functional Devices" = $NotfunctionalDevices
        "Total Devices" = $TotalDevices
    }

    $parsedData += $parsedObject
}

$parsedData | Export-Csv -Path $outputcsv -NoTypeInformation

这样处理后,输出的CSV里就会显示实际的数值,而不是System.Object[]了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:25:10