Cómo usar el comando Where-Object en PowerShell
-
el cmdlet
Where-Object
en PowerShell - Crear condiciones de filtro con bloques de script en PowerShell
-
Usar
Where-Object
para filtrar objetos en PowerShell - Crear condiciones de filtro con parámetros en PowerShell
- Usar múltiples declaraciones condicionales

Cuando trabajas con las propiedades de Windows PowerShell en una colección de objetos, a veces necesitarás una forma de filtrar todas las cosas específicas que solo necesitas. Por lo tanto, saber cómo usar el cmdlet Where-Object
de Windows PowerShell es una técnica vital que debes tener en tu conjunto de habilidades de Windows PowerShell.
El cmdlet Where-Object
es un comando valioso para filtrar objetos. En este artículo, aprenderemos varias maneras de construir un comando Where-Object
, su sintaxis y el uso de múltiples declaraciones condicionales.
el cmdlet Where-Object
en PowerShell
El único objetivo del cmdlet Where-Object
de Windows PowerShell es filtrar la salida de un comando y devolver la información específica que queremos imprimir.
En resumen, el cmdlet Where-Object
es un filtro. Nos permite construir una condición que devuelve True
o False
. Dependiendo del resultado de la situación, el cmdlet entonces devuelve la salida o no.
Puedes crear esa condición de dos maneras: bloques de script y parámetros.
Crear condiciones de filtro con bloques de script en PowerShell
Los bloques de script son un componente vital en Windows PowerShell. Se utilizan en cientos de lugares a lo largo del lenguaje de scripting. Un bloque de script es una función anónima que categoriza código y lo ejecuta en varios lugares.
Ejemplo de bloque de script:
{$_.StartType -EQ 'Automatic'}
Usando la tubería de Windows PowerShell, podrías enviar esos objetos al cmdlet Where-Object
y usar el parámetro FilterScript
. Dado que el parámetro FilterScript
acepta un bloque de script, podemos crear una condición para verificar si la propiedad de cada objeto es igual al valor específico, como en el ejemplo a continuación.
Código de ejemplo:
Get-Service | Where-Object -FilterScript { $_.StartType -eq 'Automatic' }
Where-Object
y no incluyen el nombre del parámetro FilterScript
. En su lugar, proporcionan el bloque de script solo como Where-Object {$_.StartType -eq 'Automatic'}
para una forma más rápida y limpia de scripting.Si bien este tipo de sintaxis funciona para este escenario particular, el concepto de un bloque de script con las llaves ({}
) hace que el código sea menos legible y más difícil para los usuarios menos experimentados de Windows PowerShell. Este problema de legibilidad hizo que el equipo de Windows PowerShell introdujera parámetros.
Usar Where-Object
para filtrar objetos en PowerShell
El Get-ChildItem
obtiene la lista de todos los archivos y carpetas en la ubicación especificada. Supongamos que solo quieres mostrar los archivos .csv
en el directorio.
El siguiente ejemplo muestra cómo usar el cmdlet Where-Object
para filtrar y seleccionar solo archivos .csv
.
Get-ChildItem | Where-Object { $_.extension -eq ".csv" }
En el script anterior, la salida de Get-ChildItem
se envía al cmdlet Where-Object
. El Where-Object
filtra la salida donde la extensión de archivo es .csv
.
Salida:
Directory: C:\Users\rhntm
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 3/11/2022 7:57 AM 122 books.csv
-a---- 3/8/2022 2:07 PM 780199 house_data.csv
-a---- 3/8/2022 10:38 PM 421 play_tennis.csv
También puedes usar Where
como el alias para el cmdlet Where-Object
.
A continuación, hay otro ejemplo que filtra la lista de procesos con el valor de la propiedad ProcessName
. Muestra solo los procesos que tienen spotify
como ProcessName
.
Get-Process | where { $_.ProcessName -in "spotify" }
Salida:
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
550 31 55036 71256 2.81 1820 3 Spotify
294 21 12328 18144 0.06 13536 3 Spotify
476 64 96012 141208 20.61 13980 3 Spotify
Puedes usar el operador -notin
para seleccionar valores que no están en la colección de objetos.
Por ejemplo, el siguiente ejemplo imprime todos los procesos que no tienen spotify
como ProcessName
.
Get-Process | where { $_.ProcessName -notin "spotify" }
De esta manera, puedes usar el cmdlet Where-Object
para filtrar los objetos de la colección de objetos en función de sus valores de propiedad.
Crear condiciones de filtro con parámetros en PowerShell
Introducidos en Windows PowerShell 3.0, los parámetros tienen un flujo más natural en la forma en que se escriben. Usando el mismo ejemplo anterior, utilicemos parámetros para filtrar una salida específica.
Código de ejemplo:
Get-Service | Where-Object -Property StartType -EQ 'Automatic'
Nota que arriba, en lugar de usar un bloque de script, el comando especifica la propiedad del objeto como un valor del parámetro Property. Además, el operador -eq
es ahora un parámetro, lo que permite pasarle el valor Automatic
.
Usar parámetros de esta manera ahora elimina la necesidad de un bloque de script. Sin embargo, aunque Microsoft ha introducido parámetros como una forma más limpia de scripting, tenemos una excelente razón para usar bloques de script que discutiremos en la siguiente sección del artículo.
Usar múltiples declaraciones condicionales
Puedes combinar dos o más condiciones utilizando un operador (como -and
o -or
) para evaluarlas utilizando un bloque de script. Sin embargo, necesitamos usar un componente específico de Windows PowerShell llamado subexpresiones para evaluar cada condición con éxito.
En Windows PowerShell, podemos usar subexpresiones para ejecutar una expresión dentro de una sintaxis de filtrado como Where-Object
. Hacemos esto encerrando cualquier declaración condicional que ejecutemos con paréntesis (()
).
Código de ejemplo:
Get-Process | Where-Object { ($_.CPU -gt 2.0) -and ($_.CPU -lt 10) }
Ejemplo de bloque de script:
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------ - ------ ---- - ---- - ------ -- -- ---------- -
334 21 18972 26384 5.23 3808 0 AnyDesk
635 34 13304 51264 9.56 4140 5 notepad
726 36 12820 51196 4.69 12088 5 notepad
802 46 18356 65088 7.98 10784 5 OneDrive
340 18 6472 26436 3.44 1252 5 RuntimeBroker
698 34 14672 44484 3.63 3284 5 RuntimeBroker
323 19 5732 23432 4.00 11200 5 RuntimeBroker
560 18 6440 27752 4.63 8644 5 sihost
632 31 21524 69972 2.81 6392 5 StartMenuExperienceHost
390 18 9756 30832 3.94 3084 5 svchost
523 24 8768 36312 2.17 6300 5 svchost
524 17 6416 21036 4.42 10932 5 SynTPEnh
525 22 15336 38904 3.41 2192 5 TextInputHost
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn