我尝试计算集群中某些VM's
上的驱动器数量:
(Get-ClusterGroup -Cluster <Name> |
Where-Object {$_.GroupType –eq 'VirtualMachine'} |
Get-VM |
Measure-Object -Property Harddrives).Count
->返回55,即簇中
VM's
的计数
几个VM的硬盘驱动器不止一个,如何在流水线命令中检索正确的驱动器计数?
答案 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