CSV 和 powershell 中的分隔符存在问题

问题描述 投票:0回答:1

在获取从电子邮件转换为可读报告的 csv 时遇到问题,该脚本主要起作用,但当我尝试使用脚本将它们移动到相应的列时,它会在所有三列中返回 System.Object[] 而不是值。上面的图片是我的源文件,第二个图片是当前的输出。

代码

$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) {
      $siteSelection = $data[$i] -replace "Midtier: lcahncr1.lcahncrkc.net Site selection: ", ""`
                           -replace 'Midtier: lcahncr2.lcahncrkc.net Site selection:',''`
                           -replace 'Midtier: lcahncr3.lcahncrkc.net Site selection:',''`
                           -replace 'Midtier: lcahncr4.lcahncrkc.net Site selection:',''`
                           -replace 'Midtier: lcahncr5.lcahncrkc.net Site selection:',''`
                           -replace 'Midtier: lcahncr6.lcahncrkc.net Site selection:',''`
                           -replace 'Midtier: lcahncr7.lcahncrkc.net Site selection:',''`
                           -replace 'Midtier: lcahncr8.lcahncrkc.net Site selection:',''`
                           -replace 'Midtier: lcahncr9.lcahncrkc.net Site selection:',''

$components = $data[$i+1] -split ", "

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

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

    }

$parsedData += $parsedObject

  }

     $parsedData | Export-Csv -Path $outputcsv -NoTypeInformation
powershell csv
1个回答
0
投票

无法测试,但 powershell 似乎无法将数组解释为单个值,这就是您看到“System.Object[]”结果的原因。

它被视为一个数组而不是单个字符串/整数。

尝试用

Select-Object -First 1

管道它

所以它们看起来像

$functionalDevices = ($components | Where-Object {$_ -match "Functional Devices=\d+" }) -replace "Functional Devices=", "" | Select-Object -First 1

等等

© www.soinside.com 2019 - 2024. All rights reserved.