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-*»}
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}
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
Pero 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»}
Todavia 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»}
¡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»}
Ya 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
Programador WordPress freelance
Los comentarios están cerrados.