| Artículos | 01 FEB 2010

PowerShell (Segunda parte)

Tags: Histórico
Revivir DOS en Windows
Juan Blázquez.
La gestión de sistemas toma otra perspectiva con la nueva consola de Microsoft que facilita y aumenta la eficacia del trabajo del administrador. Siguiendo con la descripción de esta herramienta, se trata ahora de conocer cómo enlazar comandos para realizar operaciones más complejas, formatear resultados y el manejo de objetos y proveedores.

Y como Windows PowerShell trabaja con objetos de distintos subsistemas que maneja de forma independiente, la programación en esta consola, bien por script o con comandos interactivos, resultaría complicada si no se dispone de los mecanismos necesarios que permitan relacionar esos elementos y los resultados de su tratamiento. Es aquí donde entra en juego la función “pipeline” o canalización de Windows PowerShell. Una facilidad que permite combinar dos o más comandos en una única instrucción, de forma que el resultado de uno sea el argumento de ejecución de otro. El nombre de canalización se debe a que los comandos se enlazan al modo en que se conectan los tubos en una cañería. A primera vista, puede no parecer una funcionalidad con demasiada aplicación práctica. Sin embargo, cuando se comienza a trabajar con esta consola y se abordan scripts complejos, la canalización resulta muy socorrida para resolver de forma limpia algunas operaciones que por otros medios pueden ser farragosas. Una funcionalidad que permite construir script modulares, que facilita, y mucho, seguir y depurar el flujo de comandos. También reduce esfuerzos, puesto que los “módulos” o “tubos” pueden ser reutilizados, en bloques de comandos, con cortar/pegar, en script o creando funciones adicionales.
Esta canalización de comandos no es exclusiva de Windows PowerShell. Otras shell la utilizan. Sin ir más lejos, los devotos de CMD seguro que han conjugado archivos bat con pipeline en alguna ocasión, puesto que hay operaciones que no se pueden realizar de forma directa con un solo script. En Windows PowerShell se puede utilizar en prácticamente cualquier parte, siempre intercambiando objetos. El encadenamiento de cmlets es secuencial, de izquierda a derecha, siempre en el orden especificado en la instrucción. Se enlazan mediante el símbolo de barra vertical, “|”, y para un correcto funcionamiento de la canalización, hay que comprobar que los comandos enlazados, aceptan el intercambio de objetos por este medio. Esta característica se puede averiguar consultando la ayuda sobre ellos. Hay que verificar que está a “True” el valor de la configuración “¿Acepta entradas de canalización?”. Si este valor fuera “False”, el comando en cuestión no puede ser receptor de un resultado obtenido por canalización y es obligado recurrir a otros métodos más creativos para obtener los resultados buscados. Normalmente, un bloque de instrucciones o script que genere una variable con el resultado y que pueda ser pasada a otro comando. Recordar que las variables en Windows PowerShell también son objetos. La instrucción Get-Process | Get-member hace que el cmdlet GET-Member procese los resultados que se obtienen con el comando Get-Process, o lo que es lo mismo, que se muestren todos los elementos de objetos tipo proceso.

Dar trigo…
Esta canalización tiene en Windows PowerShell una aplicación inmediata en su propia operativa: la redirección de los resultados de proceso a un determinado dispositivo de salida: pantalla, impresora o archivo. Esta shell cuenta con un conjunto de comandos específicos que se encargan de controlar la salida de datos realizando dos operaciones básicas. Transformación y formateo. Como no podía ser de otra forma, el resultado de la ejecución de un cmlet es un objeto. Esta circunstancia no tiene mayor consecuencia salvo para su representación en el dispositivo de salida, que maneja datos como texto. Es decir, para ver los resultados en pantalla, imprimirlos o volcarlos a un archivo es imprescindible realizar una transformación que convierta la estructura de datos del objeto obtenido a su representación en texto. Para esta operación, existen un grupo de comandos en la consola que se encargan de la redirección a dispositivo y su correspondiente transformación. Son aquellos que tienen como verbo las palabras reservadas “OUT-“. El comando OUT-Host saca los datos por consola, por la pantalla del ordenador en donde se ejecuta el proceso. OUT-Printer, coloca los datos en la impresora seleccionada, mientras que OUT-File vuelca los resultados en un archivo, de texto, claro. En el caso de que no se precise mostrar los resultados o se quieran descartar, se puede recurrir al cmdlet OUT-NULL, que si bien evita mostrar ninguna salida, no previene la aparición de mensajes de error que sean consecuencia de fallos en ejecución. Así, los resultados de la instrucción con la que se ilustraba anteriormente la descripción de la canalización de Windows PowerShell, puede volcarse a un fichero de texto, con sólo añadir los parámetros adecuados: Get-Process | Get-member | Out-File –Filepath c:\logs\listaprocesos.txt
En lo que respecta a la representación de los datos en el dispositivo de salida, se puede controlar mediante comandos específicos o a través de modificadores de los comandos OUT, según se utilice la salida predefinida de Windows PowerShell o se haga una redirección intencionada a un dispositivo externo de salida. Por defecto, los comandos de esta consola muestran los objetos según el formato que para cada tipo se haya definido en el archivo “display.xml”. Este archivo se genera durante la instalación y contiene cuatro vistas predeterminadas para mostrar los distintos objetos que se manejan en el programa. Tabla, donde cada objeto resultante aparece como una fila y sus propiedades asociadas en las columnas. Lista, representa las propiedades de los objetos en líneas independientes. Cuando se trata de una vista Ancha, se suele mostrar una única propiedad en varias columnas. Para objetos con estructura propia, para su visualización se recurre a la vista compleja, que muestra el objeto en función de esa estructura propia. Los verbos FORMAT son los encargados de formatear el texto en consola cuando se utiliza la salida de PowerShell predeterminada. Format-Table para utilizar el formato de tabla. Format-List para lista. Fomat-Wide para la vista ancha y cuando se requiere una salida compleja o personalizada, se utiliza el comando Format-Custom. Estos cmdlets canalizan la salida de otros comandos, por lo que irán a la derecha del comando cuya salida formatean, precedidos, como antes se ha comentado, por la barra de canalización “|”. Tal que Get-Process | Get-member | Format-Table presenta los resultados como una tabla, mientras que Get-Process | Get-member | Format-List muestra la salida como una lista. La presentación de los datos, no obstante, puede refinarse según las necesidades de cada momento, recurriendo a distintos argumentos que tienen estos cmdlets, como Groupby, que agrupa elementos del mismo tipo en las tablas o Autosize, tamaño de línea, en el formateo de lista. Al utilizar los verbos OUT-X, según el dispositivo de salida, se podrán utilizar modificadores que permiten formatear los datos como resulte más conveniente para su lectura o tratamiento. Así, si la salida es por pantalla, la redirección OUT-Host puede utilizarse con el parámetro –Paging para que los resultados aparezcan paginados, al modo del modificador “more” de CMD. Cuando se utiliza el verbo OUT-File, se puede def

Contenidos recomendados...

Comentar
Para comentar, es necesario iniciar sesión
Se muestran 0 comentarios
X

Uso de cookies

Esta web utiliza cookies técnicas, de personalización y análisis, propias y de terceros, para facilitarle la navegación de forma anónima y analizar estadísticas del uso de la web. Consideramos que si continúa navegando, acepta su uso. Obtener más información