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”}
Los operadores de comparación de PowerShell son:
-lt | Menor Que |
-le | Menor o Igual |
-gt | Mayor Que |
-ge | Mayor o Igual |
-eq | Igual |
-ne | No es Igual |
-like | Es Como |
-notlike | No es Como |
-contains | Contiene |
-notcontains | No 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
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
-and | Devuelve True si ambos valores son true |
-or | Devuelve True si cualquiera de los valores son True |
-not | Invierte 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.
0 Comments