有没有办法使用Compare-Object -property来比较具有不同名称的2个属性?我有这样的事情:
$ComparisonProperty= $ComparisonProperty | Add-Member -MemberType AliasProperty -Name Url -Value ITEM_TARGET_URI -PassThru
Compare-Object $FirstFile $SecondFile -Property Url -PassThru | Where-Object{$_.SideIndicator -eq "<="} | Out-file .\result.txt
但这会产生错误:
无法将参数绑定到参数'InputObject',因为它为null
$ ComparisonProperty
//修改
示例数据是包含许多标题的2个csv文件,其中1个包含Url标头,另一个包含ITEM_TARGET_URI。结果应该是文件1中不存在于文件2中的字符串。如果我为它们提供相同的属性名称,则比较有效,但重点是强制它比较具有不同名称的2个属性。
答案 0 :(得分:0)
要回答实际问题,计算出的属性或属性别名可以满足您的需求。您一直在尝试使用后者,但您需要将属性添加到文件对象本身。考虑两个文件示例
id,first_name
1,Elia
2,Nikolos
3,Bert
4,Sharleen
5,Bill
id,beginning_name
1,Elia
2,Nikolos
3,Bert
4,Mildrid
5,Bill
请注意标题不同。所以现在让我们尝试创建属性别名。假设我已经将这些文件导入为CSV的
$file2 | Add-Member -MemberType AliasProperty -Name first_name -Value beginning_name
compare-object $file1 $file2 -Property first_name
这将为您提供您期望的结果。我在第二个文件 object
中添加了一个别名另一种解决方法是删除属性并使用字符串数组。既然我知道我想要的标题,我也可以自己获取这些列
$namesfromfile1 = $file1 | Select-Object -ExpandProperty first_name
$namesfromfile2 = $file2 | Select-Object -ExpandProperty beginning_name
Compare-Object $urls1 $urls2
根据您的PS版本,这也可以缩短。其简化是否取决于读者。
Compare-Object ($file1).first_name ($file2).beginning_name