情况如下-我有一个包含列数的csv文件(假设3)和自定义对象具有相同的列,但其中一个将是新的。我想比较列名,如果有新的列名,则添加列,然后相应地添加值到csv文件中,我不想替换当前csv文件中的所有现有内容。以下是我编写的代码,但我得到了错误:* 追加的对象没有与以下列对应的属性:column 1。若要继续处理不匹配的属性,请添加-Force参数,然后重试该命令。*
文件示例:
输出应为同一文件,但具有新列“column 4”和包含以下内容的新行,如下所示:
我不知道我做错了什么。
$file_path = '..path_to_the_file\test_csv.csv'
$csv = import-csv -path $file_path
$columns = @([pscustomobject]@{
column1 = 'something_new_1'
column2 = 'something_new_2'
column3 = 'something_new_3'
column4 = 'something_new_4'
}
)
$csv_columns = ($csv | get-member).where({$_.Membertype -eq 'NoteProperty'}).Name
$columns = ($columns | get-member).where({$_.Membertype -eq 'NoteProperty'}).Name
$compare = $columns | Where-Object {$csv_columns -notContains $_}
foreach ($column in $csv) {
$column | add-member -MemberType NoteProperty -Name $compare -value ''
}
$csv | export-csv -Path $file_path -NoTypeInformation
$columns | export-csv -path $file_path -Append -NoTypeInformation -force
1条答案
按热度按时间qhhrdooz1#
您可以使用此函数来简化过程,当然,这假定您要 append 的对象已经与对象数组中的对象具有相同的属性,并且只会添加新的对象。
在
Import-Csv
之后用管道将其连接起来,包括要作为参数添加的对象数组。例如:使用简单的Csv(如所讨论的Csv)的输出将是: