Aprender PowerShell paso a paso – IV

Filtrando Resultados (Where-Object)

El Cmdlet Where-Object nos da la capacidad de crear filtros específicos. Como te has dado cuenta la gran parte de los CMDLETS te muestran en la consola datos de un determinado objeto o recurso. Como por ejemplo Get-Service que nos mostrara todos los servicios que se estén ejecutando o estén detenidos. Muchas veces pasamos a traves de una canalización más objetos de los deseados y necesitamos filtrarlos antes del final de la canalización, para asi poder realizar acciones solo en un parte del grupo de objetos deseados.

Los bloques Where-Object utilizan la variable ‘$_’ para referirse al objeto actual de la canalización.  Por ejemplo mostremos una lista de valores y queremos que solo nos muestren los valores mayores que 20.

1,56,34,20,14,22,15,38 | Where-Object {$_ -gt 20}

Ahora vamos a filtrar los resultados del comando Get-Service y mostrar solo los servicios en ejecución.

Get-service | where-object {$_.Status –eq “Running”} 

Where-Object Cmdlet PowerShell
La estructura del cmdlet Where-Object es {_.Campo operador valor}

Los operadores de comparación de PowerShell son:

-ltMenor Que
-leMenor o Igual
-gtMayor Que
-geMayor o Igual
-eqIgual
-neNo es Igual
-likeEs Como
-notlikeNo es Como
-containsContiene
-notcontainsNo Contiene

Estos operadores para los que no los conozcan son abreviaciones en inglés por ejemplo –gt “greater than”  -ge “greater equal” –ne  “not equal”

Cada cmdlet te mostrara diferentes resultados, por lo tanto en el momento de usar Where-Object debes conocer el resultado original del cmdlet. Por ejemplo vamos a introducir el cmdlet Get-ChildItem

 

PowerShell GET-CHILDITEM
Podemos apreciar que tenemos por defecto Mode, LastWriteTime, Lenght, Name

Ya que conocemos la salida por defecto de este comando puedes utilizar el filtro where-object {$_.Name –like “Do*”}

Como podéis ver hemos utilizado “Do*” ese comodín indica cualquier objeto que empieze por Do

Operadores Lógicos de PowerShell

-andDevuelve True si ambos valores son true
-orDevuelve True si cualquiera de los valores son True
-notInvierte True y False
!Invierte True y False

Repetir una tarea para varios Objetos (ForEach-Object)

El cmdlet Foreach-Object usa bloques de script y el descriptor $_ para el objeto de canalización actual con el fin de poder ejecutar un comando en cada objeto de la canalización.

Vamos a ver un ejemplo complejo para este cmdlet Get-WmiObject -Class Win32_LogicalDisk 

Como puedes ver nos devuelve el espacio libre y mas datos en bytes lo cual nos dificulta la lectura para convertirlo a MegaBytes podemos usar el siguiente cmdlet donde también utilizaremos Select-Object -Property Name,FreeSpace para mostrar las propiedades Name y FreeSpace en nuestro resultado y luego canalizamos e introducimos un ForEach-Object con el respectivo calculo para dividir el valor de FreeSpace y convertirlo a MegaBytes.

Get-WmiObject -Class Win32_LogicalDisk | Select-Object -Property Name,FreeSpace | ForEach-Object -Process {$_.FreeSpace = ($_.FreeSpace)/1024/1024; $_}

Y obtendremos el siguiente resultado:

 

Hemos llegado al final de esta publicación en nuestra próxima publicación vamos con el scripting a fondo, espero os haya gustado.

 

 

Deja tus Comentarios

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Ayúdanos compartiendo este post

No queremos interrumpir tu experiencia en nuestro site pero compartir es una buena forma de colaborar con el autor.
Cerrar
This window will automatically close in 60 seconds

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, haz clic en el enlace para mayor información.

ACEPTAR
Aviso de cookies