我想做的是比较来自两个 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)})
这就是他们的样子。
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