计算对象的属性

时间:2018-07-06 14:26:58

标签: powershell

我尝试计算集群中某些VM's上的驱动器数量:

(Get-ClusterGroup -Cluster <Name> | 
    Where-Object {$_.GroupType –eq 'VirtualMachine'} | 
    Get-VM | 
    Measure-Object -Property Harddrives).Count
  

->返回55,即簇中VM's的计数

几个VM的硬盘驱动器不止一个,如何在流水线命令中检索正确的驱动器计数?

3 个答案:

答案 0 :(得分:3)

尝试枚举属性:

$harddrives = Get-ClusterGroup -Cluster '<String>' | ? GroupType -eq VirtualMachine |
        Get-VM | % HardDrives
$harddrives.Count

v4 +中的一些速记:

(@(Get-ClusterGroup -Cluster '<String>').
    Where({ $_.GroupType -eq 'VirtualMachine' }) |
    Get-VM).HardDrives.Count

答案 1 :(得分:2)

互补 TheIncorrigible1's helpful answer,其中包含有效的解决方案,但仅暗示您的Measure-Object通话存在问题:

令人惊讶的是,Measure-Object 没有枚举属于自己集合的输入对象或属性,如以下示例所示:

PS> ((1, 2), (3, 4) | Measure-Object).Count
2  # !! The input arrays each counted as *1* object - their elements weren't counted.

PS> ([pscustomobject] @{ prop = 1, 2 }, [pscustomobject] @{ prop = 3, 4 } | 
      Measure-Object -Property prop).Count
2  # !! The arrays stored in .prop each counted as *1* object - their elements weren't counted.

以上适用于Windows PowerShell v5.1 / PowerShell Core v6.1.0。
This GitHub issue建议引入一个-Recurse开关,该开关将允许选择枚举集合值的输入对象/输入对象属性。

答案 2 :(得分:0)

我遇到的问题更接近于原始问题。我有一个自定义PowerShell对象,需要 literally 计算其中有多少个属性。我发现了:

($Object | Get-Member -MemberType NoteProperty | Measure-Object).Count