Powershell – 14 – Where-Object

14.1- Where-Object

Crea un filtro que controla los objetos que se van a pasar con una canalizacion de comandos. Filtra los objetos que recibe, bien como entrada canalizada o a traves del parametro «-inputobject«. Determina que objetos se van a pasar a traves de la canalizacion mediante la evaluacion de un bloque de script que puede incluir una referencia a un objeto que se va a filtrar. Si el resultado de la ejecucion es True, el objeto que se va a procesar se pasa a traves de la canalizacion, en caso contrario, el objeto queda descartado.

Este cmdlet lo vamos a usar mucho, por lo tanto es bueno comprender su funcionamiento correctamente. Para ello, voy a dedicar especial atencion al apartado de ejemplos de este cmdlet para que quede lo mas claro posible.

Ademas, este cmdlet lo usaremos en ejemplos a partir e ahora con otros cmdlets.

14.2- Parametros

-filterscript <scriptblock>

Especifica el bloque de script que se va a evaluar, Para determinar que objetos de entrada se van a pasar a traves de la cananlizacion de comandos.

-inputobject <psobject>

Especifica los objetos que se van a filtrar.

Si guardamos el resultado de un comando en una variable, podemos utilizar «-inputobject» para pasar la variable a «where-object».

14.3- Ejemplos

Ejemplo 1

>get-command | where-object {$_.Name -like «get-*»}

pwswhere01

Aparentemente no tiene muy buena pinta y nos puede intentar desistir de seguir adelante viendo estos signos «raros» ¿no?

Pero no os preocupeis por que es bien sencillo y a medida que vayamos utilizando Powershell ya vereis que nos vamos a acomodar a este tipo de comandos.

El mayor problema que podemos encontrar al principio en este comando es: {$_.Name -like «get-*»}.

En primer lugar tengo que decir que el argumento de «where-object«, al ser una comparacion, ira entre llaves ({}).

Bien, el primer operando dentro de las llaves es: «$_.Name» que se refiere al conjunto de objetos recibidos a traves de la tuberia y en este caso a su propiedad «Name«. Es decir, que vamos a utilizar solo la propiedad «Name» de los objetos recibidos para la comparacion.

El segundo, es un operador de comparacion (como ya habreis intuido). Este en concreto (-like), lo que hace es comparar los objetos recibidos con el patron y nos mostrara todos los que coindidan con este. Cuando utilizamos «-like«, normalmente el patron tendra algun caracter comodin.

Y del tercer argumento ya hemos hablado, es el patron a buscar y no creo que sea necesario explicar nada sobre esto.

Ahora, si juntamos todo, tenemos que nos mostrara los comandos cuyo nombre comience por «get-«. Si teneis alguna duda sobre esto, me lo comentais.

Aunque los operadores de comparacion merecen un apartado proipo, voy a indicar a continuacion algunos de ellos para que podamos probarlos.

-eq igual

-ne no igual

-gt mayor que

-ge mayor o igual que

-lt menor que

-le menor o igual que

-like comparacion de caracteres comodin

-notlike lo contrario que el anterior.

-match Que coincida el segundo operando exactamente

-notmatch Lo contrario de «-match»

De todas formas, no estaria de mas que le deis una vuelta a este tema y para ello podeis utilizar el siguiente comando:

>get-help about_comparison_operators.

Ejemplo 2

>get-childitem | where-object {$_.Length -ge 10000}

pwswhere02

Como podemos observar, nos muestra los ficheros que tienen 10000 bytes o mas de los que hay en el directorio actual.

Ejemplo 3

Recordad que para conocer las diferentes propiedades que posee un objeto, podemos hacerlo mediante el cmdlet «get-member«. Este, ademas de las propiedades, nos puede mostrar otros elementos como metodos, funciones…

En el caso anterior, podriamos escribir:

>get-childitem | get-member

pwswhere03Pero esto nos devolvera la lista completa de elementos disponibles en el objeto en cuestion y nosotros queremos algo mas concreto.

Para obtener solamente la lista unicamente de las propiedades hacemos lo siguiente:

>get-childitem | get-member | where-object {$_.MemberType -match «Property»}

pwswhere04Todavia no hemos conseguido completamente nuestro objetivo. Ahora volvemos a probar, pero esta vez con el operador «-eq«:

>get-childitem | get-member | where-object {$_.MemberType -eq «Property»}

pwswhere06¡Ahora si! Ahora hemos conseguido el listado que andabamos buscando.

Ejemplo 4

Ahora, por lo que sea, queremos saber que servicios estan parados en el equipo local.

Bien, para esto escribimos el siguiente comando:

> get-service | where-object {$_.status -eq «stopped»}

pwswhere05Ya lo veis. Que facil ¿no?

Venga, pues hasta aqui llega este articulo.

A pasarlo bien!!

Para ver mas articulos sobre powershell en el blog, puedes hacerlo en la pagina dedicada a Powershell.

—–
Oscar Abad
http://www.xulak.com – Consultoría informática

Los comentarios están cerrados.