Hace unos días pregunté a los asistentes a una conferencia cuántos de ellos, IT pros la mayoría, usaban PowerShell en sus tareas de administración. No me llevé mucha sorpresa cuando ninguno levantó la mano, lo que me llevó a preguntarme el por qué; la respuesta podría ser el miedo a lo desconocido, la comodidad de usar una herramienta gráfica en lugar de la línea de comandos. Y la verdad es que los administradores de más edad son mucho más abiertos a usar scripts y la línea de comandos que los más noveles.
Para ayudar a cambiar esta situación, PowerShell 3.0, la versión incluida en Windows 8 y Server 2012 trae muchísimas mejoras, gran parte de las mismas enfocadas a facilitar la curva de aprendizaje de los administradores que se acercan por primera vez a este lenguaje. Y me han sorprendido gratamente sus nuevas funcionalidades y mejoras de otras existentes que hacen que el trabajo con PowerShell se haga más cómodo que nunca.
Además de la propia ventana de comandos de PowerShell, tenemos una nueva versión del ISE (Integrated Script Environment), que hará las delicias de más de uno.
ISE 3.0 proporciona, además de la ventana de línea de comando, un panel de scripts donde podemos editar los mismos, y en ambas disponemos ahora de la funcionalidad «Intellisense», que nos va a mostrar información sensible al contexto sobre los comandos que estamos escribiendo, permitiéndonos completarlos con los parámetros, propiedades y funciones que nos va proponiendo mediante listas desplegables que aparecen automáticamente. Además, tiene facilidades para la edición como la numeración de líneas y las regiones de código que se pueden contraer y expandir a voluntad.
También tiene la posibilidad de añadir estructuras de código predefinidas, pulsando la combinación de teclas CTRL-J, tanto para las estructuras de control clásicas (for, if, do-while,…) como para los nuevos «Workflows» de los que hablaré más adelante.
También se incluye a la derecha un panel de comandos, donde podemos consultar todos los disponibles (más de 2400 en esta versión), viendo sus parámetros y con la posibilidad de preparar de forma gráfica y sencilla el comando e insertarlo en nuestro código una vez completado, o ejecutarlo directamente en la ventana de comandos inferior.
Una opción añadida de lo más interesante está en el menú Complementos – Abrir sitio web de herramientas de complemento, que nos lleva a una página en la que podemos encontrar diversos packs añadidos por la comunidad que proporcionan funcionalidad adicional a nuestro sistema, y en particular y proporcionada por Microsoft, el Script Explorer, que una vez instalado, nos da acceso a multitud de scripts y funciones de ejemplo, clasificadas por temas, que son totalmente funcionales, y que podemos adaptar a nuestras necesidades para a su vez construir nuestros propios scripts.
Por lo que respecta al lenguaje en sí, PowerShell 3.0 incluye más de 2.400 cmdlets, en un total de 239 módulos, y que contemplan la mayoría de funcionalidades de Windows Server (Networking, Active Directory, Seguridad, DHCP, DNS, etc). Además, ya no es necesario cargar un módulo para usar los cmdlets definidos en el mismo, sino que se carga automáticamente al ejecutar el cmdlet.
La ayuda de PowerShell no está disponible al principio, salvo una ayuda básica que enumera los parámetros de cada comando. Para obtener la ayuda completa y actualizada se usa el comando Update-Help desde un equipo conectado a Internet. Este comando descarga la ayuda al equipo local, donde la podemos guardar posteriormente en una carpeta compartida con el comando Save-Help, de tal forma que después podremos ejecutar en otros ordenadores de nuestra red el comando Update-Help -SourcePath para descargar los archivos de ayuda desde esa carpeta compartida en lugar de desde Internet.
Para facilitar la búsqueda de comandos disponemos del comando Get-Command, al que pasándole como parámetro el texto a buscar (incluyendo wildcards) nos va a mostrar la lista de comandos que cumplen con la expresión.
> Get-Command *-Net*
Una vez localizado el comando buscado, con Get-Help obtendremos ayuda detallada sobre el mismo.
> Get-Help Disable-NetAdapter
Por fin, desde la ventana de comando de PowerShell también podemos acceder al panel de comandos (similar al del ISE), desde donde podemos rellenar y lanzar cualquier comando, salvo con la diferencia de que no podemos mantenerlo abierto constantemente, pues es necesario cerrarlo para poder continuar en la ventana de comando.
> Show-Command
En cuanto a mejoras del lenguaje, a los ya conocidos cmdlets, scripts y funciones, se añaden ahora los Workflows, que no son otra cosa que scripts preparados para ejecutarse durante largo tiempo y obtener información o realizar acciones en unos pocos o en cientos de equipos. Además, sus actividades (así se llaman los grupos de código que componen el Workflow) se pueden ejecutar en serie o de forma paralela, y si es necesario reiniciar un equipo durante la ejecución del Worlflow, éste puede esperar a que el equipo arranque, o a que tras el arranque esté disponible Windows PowerShell, la red o un servicio en particular, para continuar la ejecución del Workflow.
Otra de las nuevas características de PowerShell 3 es la Conectividad Robusta de Sesiones, que permite que una conexión PowerShell remota permanezca en estado de conexión durante pequeñas pérdidas de conectividad de red, hasta cuatro minutos. Los comandos continúan ejecutándose en el equipo de destino, y la sesión puede ser recuperada desde el mismo equipo (de forma automática o manual si se ha reiniciado el mismo) o desde otro equipo diferente. Si se sobrepasan los cuatro minutos sin que se haya restablecido la conectividad, la ejecución de comandos se suspende sin pérdida de datos y la sesión remota pasa a un estado desconectado, pudiéndose reconectar una vez restablecida la conectividad.
También se ha añadido nueva funcionalidad para realizar una programación avanzada para ejecución de scripts, mediante el uso de desencadenadores (triggers) para definir la periodicidad o causalidad de ejecución de los scripts (a una hora, diario, al inicio del equipo, etc).
Por fin, también como novedad disponemos de la característica «PowerShell Web Access», instalable desde el asistente de roles y características, que nos va a permitir en el equipo en que la hayamos instalado publicar una página web desde la que tendremos acceso mediante PowerShell remoto a otros equipos de nuestra red. El escenario típico para usar esta característica es instalar este servidor en nuestra red perimetral, de tal forma que un usuario con los permisos adecuados pueda acceder a esa página PowerShell Web Access desde Internet, y a través de la misma administrar mediante PowerShell equipos de nuestra red interna.
Como hemos visto en este pequeño baño, PowerShell 3 incluye numerosas funcionalidades, gran parte de ellas encaminadas a hacer que los administradores se familiaricen con el lenguaje y se acostumbren a usarlo.
Comentarios recientes