PowerShell_> Creamos un word por comandos…

Hola, hoy quiero tratar varios temas, a petición de algunos… (maestros @seguridadyredes  y @itzala74  que sepáis que os dedico este post amigos XD) que me “insinuaron” usar powershell para crear un word, pero además quiero tratar otra cosilla, preparados? Empezamos.

Lo primero, cuando creamos un script en powershell muchas veces probamos varios cmdlets, opciones, etc y después tenemos que estar haciendo scroll hacia atrás para ver los resultados de los comandos que hemos ejecutado, los resultados, etc. si ya se que si le damos a “flecha arriba-abajo” vamos viendo los últimos comandos utilizados, pero si llevamos un rato largo haciendo pruebas, encontrar que es lo que habíamos realizado y como, se nos puede complicar la cosa, para evitar esto os presento al cmdlet Start-Transcript,  el cual nos permitirá crear un registro de que pase en la sesión de powershell donde lo activemos a un fichero de texto.

Ya tenéis la ayuda, ahora vamos a iniciar el registro de la sesión actual y lo guardaremos  en f:\creamosWord.txt y vamos al crear un documento de word por líneas de comandos.

Iniciamos el transcript, con Start-Transcript:

A partir de ahora lo que escribamos en la sesión quedará registrado en f:\creamosWord.txt

Antes de seguir se hace obligado explicar de forma muy somera que es un objeto COM (Component Object Model) por decirlo muy a lo bestia, “es un programa que permite que otros programas tengan acceso a sus funciones, métodos, y eventos, de tal manera, que algún programa pueda usarlo para ejecutar una tarea especifica.” esta definición, de Jorge_Mota, obtenida de foros del web  es, al menos para mi, la forma más simple de explicarlo, si quieres aprender más sobre el tema, te recomiendo la definición de la WIKIPEDIA.

Pero, ¿podemos crear un objeto COM desde powershell?, pues va a ser que sí…. veamos como:

Listo, objeto creado, ahora empecemos a trabajar un poco, creo que seria interesante, como mínimo ver lo que estamos haciendo, ver el word no? venga, $word.visible = $true

Ahora veremos que se ha abierto el word, en mi caso word 2016 (original eh….).

Quedaros con el detalle, hemos abierto el word, pero no hemos creado ningún documento, vamos a crearlo.

Ahora si, ya tenemos un documento creado…. vamos a activar el documento para empezar a trabajar con el y ¿creamos un título?

Hemos creado un título, y hemos introducido la fecha y hora actuales, en la que estoy escribiendo esta parte del post. Bueno ya hemos escrito algo, vamos a dejar 2 líneas en blanco, veamos como se hace…

Y ahora escribiremos algo en negrita:

Después de escribir en negrita, he vuelto a dejar el valor a cero (normal), si en lugar de Bold, lo sustituímos por Italic nos escribirá en cursiva, ¿lo comprobamos?

Pues sí, si que funciona 🙂 pero, y como podemos escribir por ejemplo lo procesos de nuestro equipo, en modo de inventario a word, pues veamos como en el siguiente ejemplo:

Es relativamente sencillito, basta con guardar el resultado del comando en una variable, recomiendo de momento utilizar el | Out-String  en otro post ya pondremos más ejemplos, para que os sea más fácil de manipular, y como podéis observar, simplemente  en el TypeText en lugar de poner un texto, escribimos directamente la variable y a correr.

Ya hemos realizado muchas tareas desde nuestro powershell sobre word, pero nos falta una cosilla, ¿como guardamos y salimos de word?, vamos a ello…..

Se ve claramente que en la variable $informe le pasamos la ruta y normbre de archivo, para posteriormente guardar el documento y finalmente salimos de word, ¿hemos acabado aquí el post de hoy? NO, nos falta la primera parte, nuestro transcript, vamos a parar el transcript y veamos que pasa

Y ahora veamos que tenemos en creamosword.txt

Ya tenemos toda la información de todo lo que hemos ejecutado, no se ven resultados de los comandos porque las salidas han ido directamente al word, pero si nos hubiésemos equivocado, también nos saldría el error en este documento.

Se pueden hacer muchas cosas más con Word; cambiar el tamaño de la letra por ejemplo ($seleccion.Font.Size = 16), agregar tablas, numerar las páginas, cambiar el tamaño de los márgenes, cambiar colores, guardar el documento en otros formatos, si usamos el comando:

[Enum]::GetNames([microsoft.office.interop.word.WdSaveFormat])

Podemos ver los formatos en que se puede guardar en documento que estamos creando,

Pero bueno, paro que se me vengo arriba y el post no acabará nunca, que sepáis que hay mucha documentación en internet y que esto ha sido un ejercicio más para practicar con powershell, que le perdamos todos el miedo y veáis que se pueden hacer y automatizar de todo. He querido mostraros la utilidad del cmdlet Start-transcript / stop-transcript, que tal y como he explicado al principio del post nos ayudará a crear un registro de lo que hacemos en la sesión activa, más que interesante, y hemos creado un documento de word con varias opciones que en alguna ocasión nos puede venir bien para nuestros scripts.

Sin más, como siempre os agradezco vuestra visita a nuestro humilde blog y espero que os gusten nuestros contenidos. Un saludo a todos.

2 opiniones en “PowerShell_> Creamos un word por comandos…”

  1. Muy bien, estaba a punto de preguntar (a medida que iba leyendo) si se podía guardar en otro formato diferente a .txt para guardar con fuente negrita, cursiva, etcétera (el txt que se guarda está en utf8 así que no es exactamente “texto plano”). y observo que especificáis más adelante el listado completo. YO ESCOGERÍA RTF (rich text format) por su compatibilidad con muchísimas aplicaciones.

    *Mi enhorabuena* , muy didáctico el artículo, ¡felicitaciones!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *