【问题标题】:compare-object left or right side only仅比较对象左侧或右侧
【发布时间】:2015-04-05 04:43:41
【问题描述】:

快速提问

有没有更好(即更有效/更简洁)的方法来做到这一点?

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

详情

Compare-Object 提供参数-excludeDifferent-includeEqual 以允许您修改获得的结果。

  • 同时使用这两种方法可以获得内部连接
  • 仅使用 -includeEqual 即可获得完整的外部联接
  • 只使用-excludeDifferent 是没有意义的;由于默认情况下相等的项目被排除在外,因此它现在将排除所有内容。

没有-includeLeft-excludeLeft 或类似的选项。

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

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

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

【问题讨论】:

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


【解决方案1】:

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

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

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

}

用法

compare-object $a $b | leftside

【讨论】:

  • 我还没有发现filters,非常感谢您的专业提示!
  • 过滤器很早就在 PS 中引入,但我认为它可以完全替换为 function
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    • 2019-08-25
    • 2017-12-28
    相关资源
    最近更新 更多