[pscustomobject]
является типом .NET ссылки , поэтому сравнение двух экземпляров [1] с -eq
будет проверять на равенство ссылок (идентичность), т.е. если два экземпляра один и тот же объект [2] - что явно не так в вашем сценарии.
Предполагая, что свойства ваших пользовательских объектов являются экземплярами типов значений или строк (что имеет место), вы можете использовать Compare-Object
для сравненияобъекты по их значениям свойств , с возможностью сравнения двух коллекций :
$fileInfo = @(
[pscustomobject]@{
user_id = $user
studio = $studio
function = $Task
end_time_local = $creationTime
asin = $ASIN
variant = $variant
process_class_id = $processClass
}
)
# Get the property names.
# This assumes that the CSV data has (at least) the same
# set of properties (columns).
$propNames = $fileInfo[0].psobject.properties.Name
$currentData = Import-Csv "$scansFolder\$fileName.csv"
# Compare the $fileInfo custom object(s) to the custom objects read
# from the CSV file and only export those that are unique to the RHS ('=>')
# back to the file, i.e., those that don't match $fileInfo.
Compare-Object -Property $propNames $fileInfo $currentData |
Where-Object SideIndicator -eq '=>' | Select-Object InputObject |
Export-Csv "$scansFolder\$fileName.csv" -Append -NoTypeInformation -Force
[1] Import-Csv
выходных данных [pscustomobject]
экземпляры тоже.
[2] См. раздел справки Сравнение равенства (написан для C #, но применяется аналогично оператору PowerShell -eq
).