tutorial script learn ise ejemplos ejecutar desde comandos powershell scripting

script - ¿Cómo contar objetos en PowerShell?



powershell scripting tutorial (4)

Esto te hará contar:

get-alias | measure

Puedes trabajar con el resultado como con el objeto:

$m = get-alias | measure $m.Count

Y si también desea tener alias en alguna variable, puede usar Tee-Object:

$m = get-alias | tee -Variable aliases | measure $m.Count $aliases

Más información sobre el cmdlet Measure-Object está en Technet .

No lo confunda con el cmdlet Measure-Command, que es para medir el tiempo. (otra vez en Technet )

Mientras leo en la guía del usuario de PowerShell, uno de los conceptos básicos de PowerShell es que los comandos aceptan y devuelven objetos en lugar de texto. Entonces, por ejemplo, ejecutar get-alias me devuelve una cantidad de objetos 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 ...

Ahora, ¿cómo obtengo el recuento de estos objetos?


Solo usa paréntesis y ''cuenta''. Esto se aplica a Powershell v3

(get-alias).count


Tan corto como la respuesta de @ jumbo es :-) puedes hacerlo aún más tersely. Esto solo devuelve la propiedad Count de la matriz devuelta por la subexpresión de antecedentes:

@(Get-Alias).Count

Un par de puntos a tener en cuenta:

  1. Puede poner una expresión arbitrariamente compleja en lugar de Get-Alias , por ejemplo:

    @(Get-Process | ? { $_.ProcessName -eq "svchost" }).Count

  2. El signo inicial (@) es necesario para una solución robusta. Mientras la respuesta sea dos o más, obtendrás una respuesta equivalente con o sin el @, pero cuando la respuesta sea cero o uno, no obtendrás salida a menos que tengas el signo @. (Obliga a la propiedad Count a existir forzando a que la salida sea una matriz).

Actualización 2012.01.30

Lo anterior es cierto para PowerShell V2. Una de las nuevas características de PowerShell V3 es que usted tiene una propiedad Count incluso para singletons, por lo que el at-sign deja de ser importante para este escenario.


@($output).Count no siempre produce resultados correctos. ($output | Measure).Count método ($output | Measure).Count .

Encontré esto con el cmdlet Get-VmQuestion de VMware:

$output = Get-VmQuestion -VM vm1 @($output).Count

La respuesta que dio fue una, mientras que

$output

no produjo ningún resultado (la respuesta correcta fue 0 como se produjo con el método de Measure ).

Esto solo parecía ser el caso con 0 y 1. Cualquier cosa por encima de 1 era correcta con pruebas limitadas.