如何在PowerShell中计数对象?
正如我在PowerShell用户指南中阅读的,PowerShell的核心概念之一是命令接受和返回对象,而不是文本。 例如,运行get-alias返回一些System.Management.Automation.AliasInfo对象: 
PS Z:\> get-alias CommandType名称定义 ----------- ---- ---------- 别名%ForEach对象 别名? 位置对象 别名ac Add-Content 别名asnp Add-PSSnapIn 别名猫Get-Content 别名cd Set-Location 别名chdir Set-Location ...
现在, 我如何获得这些对象的数量?
这会让你数:
 get-alias | measure 
您可以像对象一样处理结果:
 $m = get-alias | measure $m.Count 
如果你想在别的variables中有别名,你可以使用Tee-Object:
 $m = get-alias | tee -Variable aliases | measure $m.Count $aliases 
有关Measure-Object cmdlet的更多信息在Technet上 。
不要将它与用于时间测量的Measure-Command cmdlet混淆。 (再次在Technet上 )
 只要@ jumbo的答案是:-)你可以做得更简洁。 这只是返回由前导子expression式返回的数组的Count属性: 
 @(Get-Alias).Count 
有几点需要注意:
- 
您可以将任意复杂的expression式replace为 Get-Alias,例如:@(Get-Process | ? { $_.ProcessName -eq "svchost" }).Count
- 
最初的符号(@)是强大的解决scheme所必需的。 只要答案是两个或两个以上,你会得到一个等效的答案,不pipe有没有@,但是当答案是零或一个,你将不会得到输出,除非你有@符号! (通过强制输出为数组,强制 Count属性存在。)
2012.01.30更新
 以上是PowerShell V2的情况。  PowerShell V3的一个新function是,即使对于单例,你也有一个Count属性,所以在这种情况下,at-sign变得不重要。 
只需使用括号和“计数”。 这适用于Powershell v3
 (get-alias).count 
  @($output).Count并不总是产生正确的结果。 我使用($output | Measure).Count方法。 
我发现这与VMware Get-VmQuestion cmdlet:
 $output = Get-VmQuestion -VM vm1 @($output).Count 
它给出的答案是一个,而
 $output 
 没有产生输出(正确答案是0,与Measure方法一样)。 
只有0和1才是这种情况。高于1的任何情况都是正确的。