Uso del comando Where-Object en PowerShell
-
El cmdlet
Where-Object
en PowerShell - Creación de condiciones de filtro con bloques de secuencias de comandos en PowerShell
- Creación de condiciones de filtro con parámetros en PowerShell
- Uso de declaraciones condicionales múltiples
Cuando trabaja con las propiedades de Windows PowerShell en una colección de objetos, a veces necesitará una forma de filtrar todas las cosas específicas que solo necesita. Por lo tanto, saber cómo usar el cmdlet Where-Object
de Windows PowerShell es una técnica vital que debe tener en su conjunto de habilidades de Windows PowerShell.
El cmdlet Where-Object
es un comando valioso para filtrar objetos. En este artículo, aprenderemos varias formas 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 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
. Según el resultado de la situación, el cmdlet devuelve el resultado o no.
Puede crear esa condición de dos maneras: bloques de secuencias de comandos y parámetros.
Creación de condiciones de filtro con bloques de secuencias de comandos en PowerShell
Los bloques de secuencias de comandos son un componente fundamental de Windows PowerShell. Se utilizan en cientos de lugares en todo el lenguaje de secuencias de comandos. Un bloque de script es una función anónima que categoriza el código y lo ejecuta en varios lugares.
Bloque de secuencia de comandos de ejemplo:
{$_.StartType -EQ 'Automatic'}
Con la canalización de Windows PowerShell, puede canalizar 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 o no al valor específico, como el ejemplo a continuación.
Código de ejemplo:
Get-Service | Where-Object -FilterScript {$_.StartType -eq 'Automatic'}
Nota: Mucha gente usa parámetros posicionales con el cmdlet Where-Object
y no incluye el nombre del parámetro FilterScript
. En su lugar, proporcionan el bloque de secuencias de comandos solo como Where-Object {$_.StartType -eq 'Automatic'}
para una forma más rápida y limpia de secuencias de comandos.
Si bien este tipo de sintaxis funciona para este escenario en particular, el concepto de un bloque de script con llaves ({}
) hace que el código sea menos legible y más difícil para los usuarios de Windows PowerShell menos experimentados. Este problema de legibilidad hizo que el equipo de Windows PowerShell introdujera parámetros.
Creación de 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, usemos parámetros para filtrar una salida específica.
Código de ejemplo:
Get-Service | Where-Object -Property StartType -eq 'Automatic'
Observe anteriormente que en lugar de usar un bloque de script, el comando especifica la propiedad del objeto como un valor de parámetro para el parámetro Property. Además, el operador -eq
ahora es un parámetro, lo que le permite pasarle el valor Automático
.
El uso de parámetros de esta manera ahora elimina la necesidad de un bloque de secuencias de comandos. Sin embargo, aunque Microsoft ha introducido parámetros como una forma más limpia de secuencias de comandos, tenemos una excelente razón para usar bloques de secuencias de comandos que analizaremos en la siguiente sección del artículo.
Uso de declaraciones condicionales múltiples
Puede combinar dos o más condiciones utilizando un operador (como -y
o -o
) para evaluarlas mediante un bloque de script. Sin embargo, necesitamos usar un componente particular de Windows PowerShell llamado subexpresiones para evaluar cada condición correctamente.
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 entre paréntesis (()
).
Código de ejemplo:
Get-Process | Where-Object {($_.CPU -gt 2.0) -and ($_.CPU -lt 10)}
Bloque de secuencia de comandos de ejemplo:
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