Como estoy leyendo en la guía del usuario de PowerShell, uno de los conceptos centrales de PowerShell es que los comandos aceptan y devuelven objetos en lugar de texto. Entonces, por ejemplo, ejecutar get-alias
me devuelve varios System.Management.Automation.AliasInfo
objetos:
PS Z: \> get-alias Nombre del tipo de comando Definición ----------- ---- ---------- Alias% para cada objeto Alias ? Donde-Objeto 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?
powershell
scripting
ulidtko
fuente
fuente
$Counter = $(get-alias | measure).Count
ya que siempre devuelve el valor 1 en caso de que solo haya una ocurrencia, tal como dijiste.get-alias | measure | % { $_.Count }
measure
es la abreviatura deMeasure-Object
; y devuelve un montón de otras cosas - comoAverage
,Sum
,Maximum
, etc ...Get-Alias | Measure-Object | Select-Object -ExpandProperty Count
para deshacerse de%
y{}
. Lo que es más fácil de escribir y leer es para otra discusión.Tan breve como la respuesta de @jumbo es :-) puedes hacerlo aún más tersamente. Esto solo devuelve la
Count
propiedad de la matriz devuelta por la subexpresión antecedente:Un par de puntos a tener en cuenta:
Puede colocar una expresión arbitrariamente compleja en lugar de
Get-Alias
, por ejemplo:El signo inicial (@) es necesario para una solución robusta. Mientras la respuesta es dos o mayor obtendrá una respuesta equivalente con o sin la @, pero cuando la respuesta es cero o uno obtendrá ninguna salida a menos que tenga el signo @! (Obliga a la
Count
propiedad a existir al forzar que la salida sea una matriz).2012.01.30 Actualizar
Lo anterior es cierto para PowerShell V2. Una de las nuevas características de PowerShell V3 es que tiene una
Count
propiedad incluso para los singletons, por lo que el signo al no tiene importancia para este escenario.fuente
Set-StrictMode -Version Latest
se usa. Me encontré con esto hoy (en 5.1): algo funcionó de manera interactiva que no funcionó en una función. Lo rastreé hasta la función que tiene Set-StrictMode; cuando configuré el modo estricto de forma interactiva, tampoco funcionó.Set-StrictMode
, así que debería haberlo notado.if ($myObject.PSobject.Properties.Name -contains "count")
(de stackoverflow.com/questions/26997511/… ) antes de intentar probar la propiedad de conteo. Odio que PoSH me obligue a hacer esto, pero el Modo estricto lo vale.Solo usa paréntesis y 'cuenta'. Esto se aplica a Powershell v3
fuente
@($output).Count
No siempre produce resultados correctos. Usé el($output | Measure).Count
métodoEncontré esto con el cmdlet VMware Get-VmQuestion:
La respuesta que dio es una, mientras que
no produjo salida (la respuesta correcta fue 0 como se produjo con el
Measure
método).Este solo parece ser el caso con 0 y 1. Cualquier cosa por encima de 1 fue correcta con pruebas limitadas.
fuente