uli*_*tko 127 powershell scripting
正如我在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 ...
现在,我如何获得这些对象的数量?
jum*_*mbo 186
这会让你数数:
get-alias | measure
Run Code Online (Sandbox Code Playgroud)
您可以像对象一样处理结果:
$m = get-alias | measure
$m.Count
Run Code Online (Sandbox Code Playgroud)
如果你想在某个变量中也有别名,你可以使用Tee-Object:
$m = get-alias | tee -Variable aliases | measure
$m.Count
$aliases
Run Code Online (Sandbox Code Playgroud)
有关Measure-Object cmdlet的更多信息,请访问Technet.
不要将它与用于时间测量的Measure-Command cmdlet混淆.(再次在Technet上)
Mic*_*ens 103
只要@jumbo的回答是:-)你可以更简洁地做到这一点.这只返回Count先行子表达式返回的数组的属性:
@(Get-Alias).Count
Run Code Online (Sandbox Code Playgroud)
有几点需要注意:
您可以使用任意复杂的表达式代替Get-Alias,例如:
@(Get-Process | ? { $_.ProcessName -eq "svchost" }).Count
Run Code Online (Sandbox Code Playgroud)初始符号(@)是稳健解决方案所必需的.只要答案是两个或更多,你会得到一个等价的答案,有或没有@,但当答案是零或一个你将得到没有输出,除非你有@符号!(它Count通过强制输出为数组来强制属性存在.)
2012.01.30更新
以上适用于PowerShell V2.PowerShell V3的一个新功能是Count即使对于单身人士也有一个属性,因此对于这种情况,at-sign变得不重要.
pra*_*ran 18
只需使用括号和'计数'.这适用于Powershell v3
(get-alias).count
Run Code Online (Sandbox Code Playgroud)
小智 5
@($output).Count并不总是产生正确的结果。我用的($output | Measure).Count方法。
我是通过VMware Get-VmQuestion cmdlet找到的:
$output = Get-VmQuestion -VM vm1
@($output).Count
Run Code Online (Sandbox Code Playgroud)
它给出的答案是一个,而
$output
Run Code Online (Sandbox Code Playgroud)
没有产生任何输出(正确答案是使用该Measure方法产生的0 )。
对于0和1,似乎只有这种情况。在有限的测试中,大于1的任何内容都是正确的。
| 归档时间: |
|
| 查看次数: |
370170 次 |
| 最近记录: |