Saltar al contenido

Consejo rápido: Curar los dolores de cabeza de Excel con PowerShell

Claro que he estado en IT por casi 15 años, pero (todavía) no soy un mago de Microsoft Excel. Recientemente tuve que recuperar alguna información de una hoja de cálculo de 100 filas. No sólo tuve que desplazarme hacia arriba y abajo continuamente, sino que las columnas eran de tamaño variable, así que a menudo tenía que desplazarme horizontalmente y cambiar el tamaño de las columnas. Fue una experiencia frustrante, y me atrevo a decir que me avergonzó tener que sacar un papel y un bolígrafo para garabatear alguna información.

¡Usa PowerShell!

Entonces me di cuenta. ¿Por qué no uso PowerShell para esto? PowerShell es genial para trabajar con archivos con formato CSV. Además, si uso el cmdlet importado CSV, todo se transforma mágicamente en un objeto, y las posibilidades son casi ilimitadas para lo que puedo hacer con los datos.

Consejo rápido: Curar los dolores de cabeza de Excel con PowerShell
Consejo rápido: Curar los dolores de cabeza de Excel con PowerShell

Mis datos de muestra

Así que, estos son los datos de mi muestra que voy a usar. Sólo estoy usando una hoja de cálculo de Excel relativamente pequeña, pero eso debería ser suficiente para ayudarte a entender a dónde voy.

Voy a trabajar con algunas cosas como la ubicación, el sistema operativo, si se trata de un sistema de 32 o 64 bits, y si el sistema es físico o virtual. He añadido algunas otras columnas, pero eso también es sólo para demostrar cómo saltarlas cuando trabajo con los datos.

Importación de los datos

Guardar la hoja de cálculo de Excel en un CSV es tan simple como volver a guardar el archivo en formato CSV, pero la verdadera magia ocurre cuando se utiliza la importación de CSV para cargar los datos. Como he mencionado, los datos de entrada se transforman en un objeto. Como resultado, puedo usar todo tipo de cmdlets incorporados para trabajar con los datos.

Primero, voy a importar los datos y guardarlos en una variable. Luego, voy a mostrar los primeros cinco objetos y dar formato a la salida.

Estoy usando específicamente el cmdlet de la Tabla de Formatos; de otra manera la presentación hubiera sido un poco más difícil de ver ya que PowerShell estaba viendo un número relativamente grande de columnas. Por defecto estaba tratando de presentar los datos en un “formato de lista” (no se muestra), mientras que yo quería ver un “formato de tabla” como se muestra arriba.

Estoy usando específicamente el cmdlet de la Tabla de Formatos; de otra manera la presentación hubiera sido un poco más difícil de ver ya que PowerShell estaba viendo un número relativamente grande de columnas. Por defecto estaba tratando de presentar los datos en un “formato de lista” (no se muestra), mientras que yo quería ver un “formato de tabla” como se muestra arriba.

Trabajando con los datos

Ahora, vamos a correr a través de algunos escenarios típicos y luego mostrar el código:

  • Escenario 1: Sé que mis datos no están completos. Muéstrame el nombre del host y el estante de los sistemas donde no tengo una ubicación en la lista.
  • Escenario 2: Necesito mover mis servidores en la ubicación “loc2”, enumerar el número de servidores de esa ubicación, y el rack.
  • Escenario 3: Al igual que en el escenario 2, note que tengo máquinas virtuales listadas en algunos racks; éstas deben estar en un host físico; muéstrame el listado de servidores físicos y virtuales en la ubicación “loc1”.
  • Escenario 4: Mi equipo de red necesita hacer algunos cambios en la red y quiere una lista de hosts por VLAN.
  • Escenario 5: Quiero un desglose de los servidores por sistema operativo y 32/64-bit.

El código completo se muestra al final de este artículo. En las siguientes capturas de pantalla, he usado alias y otros atajos para intentar acortar bastante el código.

A continuación, muestro el código de los tres primeros escenarios. No voy a repasar cada ejemplo de código, pero al hacer coincidir los escenarios mencionados, espero que los lectores puedan seguir la lógica.

Escenario 3

Hablaré brevemente del escenario 3. Podría haber sido capaz de pasar por una lógica más complicada para intentar representar mejor los datos, pero elegí en su lugar agrupar las propiedades “rack” y “física/virtual” como se muestra.

Código completo :

$data|where-object{$_.location -eq "loc1"}|select-object -locación de la propiedad,rack,$0027phy/virt$0027|grupo-objeto -rack de la propiedad,$0027phy/virt$0027|select-objeto -nombre de la propiedad,cuenta|formato de la tabla -autosize

Escenario 4:

A continuación, muestro mi primer intento de escribir el escenario 4, que es un poco difícil de leer, así que usé “propiedades calculadas” en mi segundo intento de presentar la información en un formato ligeramente más legible.

Código completo :

$data|select-object -property server,vlan|group-object -property vlan

Otras partes de la suite de oficina

También hay oportunidades de trabajar con otros productos de la Suite de Oficina, como Word. Estén atentos a más ejemplos de trabajo con algunos de los otros productos de la suite en una futura publicación.

Código del escenario 1:

$datos|donde-objeto{$_.ubicación -eq""}|formato de la tabla -automatismo

Código del escenario 2:

$datos|donde-objeto{$_.ubicación -eq "loc2"}|objeto-seleccionado -ubicación de la propiedad, bastidor|grupo de objetos -bastidor de la propiedad|objeto-seleccionado -nombre de la propiedad, cuenta|formato de la tabla -automatismo

Código del escenario 5:

$data|select-object -property os,$002732/64$0027|group-object -property os,$002732/64$0027|select-object -property name,count|sort-object -property name|format-table -autosize

¿Listo para probar tus habilidades en Powershell? Mira cómo se acumulan con esta evaluación de Smarterer. Comienza este test de Powershell ahora.