比较对象仅左侧或右侧

时间:2015-02-05 10:53:50

标签: powershell left-join diff right-join compareobject

快速提问

有更好的(即更有效/更简洁)的方法吗?

compare-object $a $b | ?{$_.SideIndicator -eq '<='}

详细

Compare-Object提供参数-excludeDifferent-includeEqual,以便您修改所获得的结果。

  • 使用两者为您提供内部联接
  • 仅使用-includeEqual为您提供完整的外部联接
  • 仅使用-excludeDifferent毫无意义;因为默认情况下会排除相等的项目,因此它现在将排除所有内容。

-includeLeft-excludeLeft或类似内容没有选项。

目前要做右侧为空的左外连接(即参考对象中不在差异对象中的项目)我需要手动过滤结果,按照上面的代码。

我错过了什么/有更好的方法吗?

http://ss64.com/ps/compare-object.html

2 个答案:

答案 0 :(得分:3)

对于该cmdlet没有类似的选项,但是您可以创建一个过滤器(例如在您的配置文件中),然后使用它来过滤结果:

之类的东西
filter leftside{
param(
        [Parameter(Position=0, Mandatory=$true,ValueFromPipeline = $true)]
        [ValidateNotNullOrEmpty()]
        [PSCustomObject]
        $obj
    )

    $obj|?{$_.sideindicator -eq '<='}

}

用法

compare-object $a $b | leftside

答案 1 :(得分:0)

您还可以添加-property SideIndicator并为其使用if语句。

$Missing = compare-object $Old $new -Property Name,SideIndicator
     ForEach($Grp in $Missing) {
          if($grp.sideindicator -eq "<=") {     
          # Do Something here
          }
     }