Uso del comando Where-Object en PowerShell

  1. El cmdlet Where-Object en PowerShell
  2. Creación de condiciones de filtro con bloques de secuencias de comandos en PowerShell
  3. Creación de condiciones de filtro con parámetros en PowerShell
  4. Uso de declaraciones condicionales múltiples
Uso del comando Where-Object en PowerShell

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 Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

Artículo relacionado - PowerShell Statement