Compare-Object - 单独的侧列

时间:2016-11-28 10:35:14

标签: powershell

是否可以在显示参考与差异对象差异的两列中显示PowerShell Compare-Object的结果?

例如使用我当前的cmdline:

Compare-Object $Base $Test

给出:

InputObject     SideIndicator
987654          =>
555555          <=
123456          <=

实际上这个名单很长。为了便于数据读取,可以像这样格式化数据:

Base    Test
555555  987654
123456

因此,每列显示该对象中存在哪些元素与另一列。

对于奖励积分,如此在列标题中计数会很棒:

Base(2)  Test(1)
555555   987654
123456

1 个答案:

答案 0 :(得分:2)

可能?当然。可行?没那么多。 PowerShell并不是真正用于创建这种表格输出。您可以做的是通过输入文件将哈希表中的差异收集为嵌套数组:

$ht = @{}
Compare-Object $Base $Test | ForEach-Object {
  $value = $_.InputObject
  switch ($_.SideIndicator) {
    '=>' { $ht['Test'] += @($value) }
    '<=' { $ht['Base'] += @($value) }
  }
}

然后transpose the hashtable

$cnt  = $ht.Values |
        ForEach-Object { $_.Count } |
        Sort-Object |
        Select-Object -Last 1
$keys = $ht.Keys | Sort-Object

0..($cnt-1) | ForEach-Object {
  $props = [ordered]@{}
  foreach ($key in $keys) {
    $props[$key] = $ht[$key][$_]
  }
  New-Object -Type PSObject -Property $props
} | Format-Table -AutoSize

要将标题名称中的项目计数更改为$props[$key]$props["$key($($ht[$key].Count))"]