【问题标题】:Powershell: comparing objects in a list to other objects in that same listPowershell:将列表中的对象与同一列表中的其他对象进行比较
【发布时间】:2017-01-30 13:54:24
【问题描述】:

我要解决的具体问题是我使用 powercli 派生的 VM 及其主机列表,但我认为对于任何 powershell 对象列表,可能会更普遍地问这个问题。

我有一个对象及其属性的列表。我想将该列表中的每个对象与该列表中的所有其他对象进行比较,并查看哪些 VM 具有该共同属性。

$vms = Get-VM | Where-Object {$_.Name -like '*vma*'} | Select Name, VMHost

是否有一种相对简单的方法来遍历列表并将每个对象与该列表中的每个其他对象进行比较,并查看哪些对象具有相同的“VMHost”属性?我发现的大多数问题都是关于比较两个对象数组,但我不确定这是否有帮助。

最终目标是生成一份报告,突出显示名称与特定字符串匹配并共享主机的虚拟机,以便可以手动检查它们并在需要时将其移动到其他主机。

【问题讨论】:

  • | Group-Object -property VMHost?
  • 是的,group-object 最终成为了最好的方法。

标签: powershell


【解决方案1】:

来自here

$b = $a | select –unique

Compare-object –referenceobject $b –differenceobject $a

选择唯一的对象,然后将其与完整列表进行比较,以便检查未复制的对象。

【讨论】:

    【解决方案2】:

    牢记最终目标,我最终得到了以下结果:

    $vms = Get-VM | Where-Object {$_.Name -like '*vma*'} | Select Name, VMHost
    $groupedvms = $vms | Group-Object -Property VMHost
    

    然后我使用 $x.count 变量来确定 VM 是否共享主机。为此,我检查了由 Group-Object 命令创建的组是否有多个分配给它们的对象(如果计数 > 1),然后基于此生成输出。

    foreach ($vmgroup in $groupedvms) {
        if ($vmgroup.count -ne 1) { [...] }
        else { [...] }
    }
    

    这让我可以生成我需要的报告。可能有更好的方法来做到这一点,但这对于我需要的东西来说效果很好(每天运行一个快速而肮脏的电子邮件报告,并在需要时进行分类)。

    【讨论】:

      猜你喜欢
      • 2019-12-21
      • 1970-01-01
      • 2022-11-19
      • 2018-04-06
      • 1970-01-01
      • 2020-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多