比较对象未正确保存为 CSV

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

我想做的是比较来自两个 pscustomobject 数组的数据,然后将不匹配的数据保存到一个数组中。然后该数组将导出到 CSV 文件。这就是我所拥有的。

function DataCompare {

$NotMatch = @()
#Compares the two arrays together and saves the ones that are different in the InfoFusion into ResultsFromFusion
$ResultsFromFusion = Compare-Object -ReferenceObject $Global:InfoFusion -DifferenceObject $Global:InfoPPMS -Property programmeLevel1, programmeLevel2, programmeLevel3, programmeLevel4 -PassThru | Where-Object SideIndicator -eq '<='

#Loops through the fusion results that dont match
ForEach ($Project in $ResultsFromFusion){
    
    #Gets the matching data from the PPMS data so the NotMatch csv has both the fusion and ppms data
    $PPMSFromDiff = $Global:InfoPPMS -match $Project.ProjectNumber
    $NotMatch += @([pscustomobject]@{ProjectId = $($Project.ProjectId);
                                     ProjectNumber = $($Project.ProjectNumber);
                                     programmeLevelFusion1 = $($Project.programmeLevel1); 
                                     programmeLevelPPMS1 = $($PPMSFromDiff.programmeLevel1); 
                                     programmeLevelFusion2 = $($Project.programmeLevel2); 
                                     programmeLevelPPMS2 = $($PPMSFromDiff.programmeLevel2);
                                     programmeLevelFusion3 = $($Project.programmeLevel3); 
                                     programmeLevelPPMS3 = $($PPMSFromDiff.programmeLevel3); 
                                     programmeLevelFusion4 = $($Project.programmeLevel4); 
                                     programmeLevelPPMS4 = $($PPMSFromDiff.programmeLevel4)})
    }#Loop End
$NotMatch | export-csv -Path $NotMatchPath -NoTypeInformation -Encoding utf8
}#Function End

但是,执行此操作时,CSV 会在某些单元格中使用 System.Object[] 进行保存,并将“-”等字符切换为“?”即使我为它添加了 utf8 编码也不会这样做。 谁能帮忙解决这个问题。

编辑:这是正在比较的两个数组的样子。

$Global:InfoPPMS += @([pscustomobject]@{ProjectId = $($Project.ProjectId);
                                                ProjectNumber = $($Project.ProjectNumber);
                                                programmeLevel1 = $($programmeLevel1); 
                                                programmeLevel2 = $($programmeLevel2); 
                                                programmeLevel3 = $($programmeLevel3); 
                                                programmeLevel4 = $($programmeLevel4)})
$Global:InfoFusion += @([pscustomobject]@{ProjectId = $($Project.ProjectId); 
                                                          ProjectNumber = $($Project.ProjectNumber);
                                                          programmeLevel1 = $($RestMethID.programmeLevel1); 
                                                          programmeLevel2 = $($RestMethID.programmeLevel2); 
                                                          programmeLevel3 = $($RestMethID.programmeLevel3); 
                                                          programmeLevel4 = $($RestMethID.programmeLevel4)})

这就是他们的样子。

arrays powershell export-to-csv psobject compareobject
1个回答
0
投票

Joining array with commas that can be exported into a csv:

[pscustomobject]@{array=1..10} | % { $_.array = $_.array -join ','; $_ }

array
-----
1,2,3,4,5,6,7,8,9,10
© www.soinside.com 2019 - 2024. All rights reserved.