Todo sobre Apple, Android, Juegos Apks y Sitios de Peliculas

Geek School: aprender a formatear, filtrar y comparar en PowerShell

En esta edición de Geek School, analizamos cómo formatear, filtrar y comparar objetos en Pipeline.

Asegúrese de leer los artículos anteriores de la serie:

Y estad atentos al resto de la serie durante toda la semana.

Formato predeterminado

Cuando comencé con PowerShell, pensé que todo era mágico, pero la verdad es que solo toma un poco de tiempo comprender lo que sucede debajo del capó. Lo mismo ocurre con el sistema de formato PowerShell. De hecho, si ejecuta el cmdlet Get-Service, el resultado generado solo le muestra 3 propiedades: Estado, Nombre y Nombre para mostrar.

Pero si canaliza Get-Service a Get-Member, verá que los objetos ServiceController tienen mucho más que estas tres propiedades, entonces, ¿qué está pasando?

La respuesta se encuentra en un archivo oculto que define cómo la mayoría de los cmdlets integrados muestran su salida. Para comprenderlo, escriba lo siguiente en el shell y presione Enter.

bloc de notas C:\Windows\System32\WindowsPowerShell\v1.0\DotNetTypes.format.ps1xml

Si usamos la función Buscar del Bloc de notas, podemos saltar rápidamente a la sección que detalla la salida del cmdlet Get-Service buscando el tipo ServiceController.

De repente, puede ver que, debajo del capó, PowerShell está formateando cualquier objeto en Pipeline que sea del tipo ServiceController y creando una tabla con tres columnas: Estado, Nombre y Nombre para mostrar. Pero, ¿qué pasa si el tipo con el que está tratando no tiene una entrada en ese archivo o en cualquier otro archivo de formato? Bueno, entonces, en realidad es bastante simple. Si el objeto que sale de la canalización tiene 5 o más propiedades, PowerShell muestra todas las propiedades del objeto en una lista; si tiene menos de 5 propiedades, las muestra en una tabla.

Formatear tus datos

Si no está satisfecho con el formato predeterminado de un objeto o tipo, puede aplicar su propio formato. Hay tres cmdlets que necesita conocer para hacer esto.

  • Lista de formatos
  • Tabla de formato
  • Todo el formato

Todo el formato simplemente toma una colección de objetos y muestra una única propiedad de cada objeto. De forma predeterminada, buscará una propiedad de nombre; Si sus objetos no contienen una propiedad de nombre, utilizará la primera propiedad del objeto una vez que las propiedades se hayan ordenado alfabéticamente.

Obtener servicio | Todo el formato

Como puede ver, también tiene dos columnas de forma predeterminada, aunque puede especificar qué propiedad desea usar y cuántas columnas desea que se muestren.

Obtener servicio | Todo el formato -Propiedad DisplayName -Columna 6

Si algo tiene el formato de tabla de forma predeterminada, siempre puede cambiarlo a la vista de lista utilizando el cmdlet Format-List. Echemos un vistazo al resultado del cmdlet Get-Process.

Esta vista tabular en realidad se adapta muy bien a este tipo de información, pero supongamos que queremos verla en forma de lista. Todo lo que realmente tenemos que hacer es canalizarlo a Lista de formatos.

Proceso de obtención | Lista de formatos

Como puede ver, solo se muestran cuatro elementos en la lista de forma predeterminada. Para ver todas las propiedades del objeto, puede utilizar un carácter comodín.

Proceso de obtención | Lista de formatos –Propiedad *

Alternativamente, puede seleccionar sólo las propiedades que desee.

Proceso de obtención | Lista de formato: nombre de propiedad, identificación

formato-tabla, por otro lado, toma datos y los convierte en una tabla. Dado que nuestros datos de Get-Process ya están en forma de tabla, podemos usarlos para elegir fácilmente las propiedades que queremos que se muestren en la tabla. Utilicé el parámetro AutoSize para que todos los datos quepan en una sola pantalla.

Proceso de obtención | Formato-Nombre de la tabla, id –AutoSize

Filtrar y comparar

Una de las mejores cosas de usar una canalización basada en objetos es que puede filtrar objetos fuera de la canalización en cualquier etapa usando el cmdlet Where-Object.

Obtener servicio | Objeto-Dónde {$_.Status -eq “En ejecución”}

Usar el objeto donde es realmente muy simple. $_ representa el objeto de canalización actual, desde el cual puede elegir una propiedad por la que desea filtrar. Aquí, solo mantenemos objetos donde la propiedad Estado es igual a En ejecución. Hay algunos operadores de comparación que puede utilizar en el bloque de secuencia de comandos de filtrado:

  • eq (igual a)
  • neq (no es igual a)
  • gt (mayor que)
  • ge (mayor o igual que)
  • lt (menos que)
  • le (menor o igual a)
  • como (coincidencia de cadenas comodín)

Se puede ver una lista completa y más información en el archivo de ayuda conceptual about_comparison; sin embargo, lleva algún tiempo acostumbrarse a la sintaxis Where-Obeject. ¡Eso es todo por esta vez!