正如我在PowerShell用户指南中所阅读的,PowerShell的核心概念之一是命令接受和返回 * 对象 * 而不是文本。例如,运行get-alias
会返回一些System.Management.Automation.AliasInfo
对象:
PS Z:\> get-alias
CommandType Name Definition
----------- ---- ----------
Alias % ForEach-Object
Alias ? Where-Object
Alias ac Add-Content
Alias asnp Add-PSSnapIn
Alias cat Get-Content
Alias cd Set-Location
Alias chdir Set-Location
...
现在,如何获得这些对象的计数?
7条答案
按热度按时间8ljdwjyq1#
这将使您计数:
可以像处理对象一样处理结果:
如果您还希望在某个变量中使用别名,可以使用Tee-Object:
有关Measure-Object cmdlet的更多信息,请参见Technet。
不要将其与用于时间测量的Measure-Command cmdlet混淆。(同样在Technet上)
q3qa4bjr2#
@jumbo的答案很短:-)你可以做得更简洁,它只返回由先行子表达式返回的数组的
Count
属性:有几点需要注意:
1.可以用任意复杂的表达式代替
Get-Alias
,例如:1.初始的at符号(@)对于一个健壮的解决方案是必要的。只要答案是2或更大,你将得到一个带或不带@的等价答案,但是当答案是0或1时,你将得到没有输出,除非你有@符号!(它通过强制输出为数组来强制
Count
属性存在。)2012年1月30日更新
PowerShell V3的一个新特性是,即使对于单例也有
Count
属性,因此at符号对于此场景来说变得不重要。ars1skjm3#
只需使用括号和'count'。这适用于Powershell v3
lmyy7pcs4#
@($output).Count
并不总是产生正确的结果。我使用了($output | Measure).Count
方法。我在VMware Get-VmQuestion cmdlet中发现了此问题:
它给出的答案是1,而
未生成任何输出(正确答案为0,与
Measure
方法生成的结果相同)。这似乎只是0和1的情况。在有限的测试中,任何大于1的值都是正确的。
dw1jzc5e5#
在我的交流中,您提供的cmdlet不起作用,答案为空,因此我必须做一点更正,并且对我来说效果很好:
vsikbqxv6#
158
7fhtutme7#
请尝试此操作以获取对象的总数。(Get-Alias)。Count