Página principal » cómo » Geek School Learning Formateo, filtrado y comparación en PowerShell

    Geek School Learning Formateo, filtrado y comparación en PowerShell

    En esta edición de Geek School, analizamos el formateo, el filtrado y la comparación de objetos en Pipeline..

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

    • Aprenda cómo automatizar Windows con PowerShell
    • Aprendiendo a usar cmdlets en PowerShell
    • Aprender a usar objetos en PowerShell

    Y estad atentos para el resto de la serie toda la semana..

    Formato predeterminado

    Cuando empecé con PowerShell, pensé que todo era mágico, pero la verdad es que solo toma un poco de tiempo entender lo que está pasando debajo del capó. Lo mismo es cierto para el sistema de formateo PowerShell. De hecho, si ejecuta el cmdlet Get-Service, el resultado generado solo le muestra 3 propiedades: Estado, Nombre y Nombre de pantalla.

    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 dentro de un archivo oculto que define cómo la mayoría de los cmdlets incorporados muestran su salida. Para obtener un entendimiento, 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 la tubería que sea del tipo ServiceController y creando una tabla con tres columnas: Estado, Nombre y Nombre de pantalla. Pero, ¿qué sucede si el tipo con el que está tratando no tiene una entrada en ese archivo, o cualquier otro archivo de formato? Pues bien, en realidad es bastante simple. Si el objeto que sale de la tubería 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.

    Formato de sus datos

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

    • Lista de formatos
    • Formato de tabla
    • Todo el formato

    Todo el formato simplemente toma una colección de objetos y muestra una propiedad única de cada objeto. Por defecto, 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 predeterminadas, aunque puede especificar qué propiedad desea usar y cuántas columnas desea que se muestren..

    Obtener servicio | Format-Wide -Propiedad DisplayName -Column 6

    Si algo está formateado como una tabla de forma predeterminada, siempre puede cambiarlo a vista de lista usando el cmdlet Format-List. Echemos un vistazo a la salida 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 hay cuatro elementos que se muestran en la lista de forma predeterminada. Para ver todas las propiedades del objeto, puede usar un carácter comodín.

    Proceso de obtención | Formato-Lista -Propiedad *

    Alternativamente, puede seleccionar solo las propiedades que desee.

    Proceso de obtención | Lista de formatos: nombre de propiedad, ID

    Formato de 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 hacer que todos los datos se ajustaran a una sola pantalla.

    Proceso de obtención | Formato de nombre de tabla, id -AutoSize

    Filtrado y comparación

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

    Obtener servicio | Donde-Objeto $ _. Estado -eq "En ejecución"

    Usando donde el objeto es realmente muy simple. $ _ representa el objeto de canalización actual, desde el que puede elegir una propiedad 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 usar en el bloque de script de filtrado:

    • eq (igual a)
    • neq (no igual a)
    • gt (mayor que)
    • ge (mayor que o igual a)
    • lt (menos que)
    • le (menor que o igual a)
    • like (Wildcard String Match)

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