Compare-Object不同的属性名称

时间:2017-08-16 13:38:53

标签: powershell

有没有办法使用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个属性。

1 个答案:

答案 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