Esta es una parte de una serie de blog en curso escrito por Adam Gordon. Cada semana, Adam le guiará a través de un comando PowerShell, mostrando cuándo y cómo utilizar cada uno. Esta semana, Adam cubre Where-Object.
Cuándo usar Where-Object
El cmdlet Where-Object selecciona objetos que tienen valores de propiedades particulares de la colección de objetos que se le pasan.
A partir de Windows PowerShell 3.0, hay dos formas diferentes de construir un comando Where-Object.
- Bloque de script. Puede utilizar un bloque de script para especificar el nombre de la propiedad, un operador de comparación y el valor de la propiedad. Where-Object devuelve todos los objetos para los que la sentencia del bloque de script es verdadera.
- Sentencia de comparación. También puede escribir una sentencia de comparación, que es mucho más parecida al lenguaje natural.
Cómo usar Where-Object
Obtener servicios detenidos:
(1º) Get-Service | Where-Object {$_.Status -eq «Stopped»}
(2º) Get-Service | where Status -eq «Stopped»
Estos comandos obtienen una lista de todos los servicios que están actualmente detenidos.
La variable automática $_ representa cada objeto que se pasa al cmdlet Where-Object.
El (1er) comando utiliza el formato de bloque de script, el (2º) comando utiliza el formato de sentencia de comparación.
Obtener procesos basados en el conjunto de trabajo:
Obtener-Proceso | Where-Object {$_.WorkingSet -GT 25000*1024}
Get-Process | Where-Object WorkingSet -GT (25000*1024)
Estos comandos enumeran los procesos que tienen un conjunto de trabajo superior a 25.000 kilobytes (KB).
Como el valor de la propiedad WorkingSet se almacena en bytes, el valor de 25.000 se multiplica por 1.024.
La sintaxis del bloque de script y de la sentencia son equivalentes y pueden utilizarse indistintamente.
Utilice el formato de sentencia de comparación:
(1º) Get-Process | Where-Object -Property Handles -GE -Value 1000
(2º) Get-Process | where Handles -GE 1000
Este ejemplo muestra cómo utilizar el nuevo formato de sentencia de comparación del cmdlet Where-Object.
El (1º) comando utiliza el formato de sentencia de comparación. En este comando, no se utilizan alias y todos los parámetros incluyen el nombre del parámetro.
El (2º) comando es el uso más natural del formato de comando de comparación. El alias where se sustituye por el nombre del cmdlet Where-Object y se omiten todos los nombres de los parámetros opcionales.
Utilice múltiples condiciones:
Get-Module -ListAvailable | where {($_.Name -no como «Microsoft*» -y $_.Name -no como «PS*») -y $_.HelpInfoUri}
El comando utiliza el parámetro -ListAvailable del cmdlet Get-Module para obtener todos los módulos del equipo.
Un operador de canalización (|) envía los módulos al cmdlet Where-Object, que obtiene los módulos cuyos nombres no empiezan por Microsoft o PS, y tienen un valor para la propiedad HelpInfoURI, que indica a PowerShell dónde encontrar archivos de ayuda actualizados para el módulo.
Las sentencias de comparación están conectadas por el operador lógico And.
El ejemplo utiliza el formato de comando de bloque de script.
NOTA: Los operadores lógicos, como And y Or, sólo son válidos en bloques de script. No puede utilizarlos en el formato de sentencia de comparación de un comando Where-Object.
Aprenda el comando de la semana pasada: Get-WinEvent.
¿Necesita formación en PowerShell? Echa un vistazo a los cursos de formación de TI en línea de PowerShell de ITProTV.