Advertisement
  1. Code
  2. Scripts
Code

El Poder de PowerShell, Parte 2

by
Difficulty:IntermediateLength:MediumLanguages:
This post is part of a series called The Power of PowerShell.
The Power of PowerShell, Part 1

Spanish (Español) translation by Rafael Chavarría (you can also view the original English article)

En la parte uno, te mostré algunas cosas interesantes que puedes hacer con PowerShell, cubrí la historia de PowerShell y exploré a fondo las capacidades de PowerShell como un poderoso lenguaje de scripting que soporta programación procedimental, funcional y orientada a objetos.

En la parte dos, discutiré el shell interactivo, el perfil y el prompt y compararé PowerShell con Bash.

PowerShell: El Shell Interactivo

PowerShell fue diseñado como un shell interactivo para administradores de sistema de Windows y power users. Se enfoca en un pequeño número de conceptos, experiencia bastante consistente y una fuente de información de objeto para encadenar y combinar comandos, filtrarlos y formatearlos. Es un sólido sistema de ayuda, el cuál también adhiere a un formato consistente, es un placer usarlo.

Veamos un poco de eso en acción.

Obteniendo Ayuda

El exhaustivo sistema de ayuda es accesible a través de Get-Help.

Para obtener ayuda más detallada y ver ejemplos, usa los switches apropiados: -examples, -details, o -full.

Si no estás seguro de cuál es el nombre del comando, solo usa las palabras clave y PoweShell te mostrará todos los comandos disponibles que contienen esta palabra clave. Veamos que cmdlets relacionados con CSV están disponibles:

Cree un pequeño flujo de información en donde limité la llamada Get-Help solo a la categoría Cmdlet y después entubarlo al "select" (alias para Select-Object) para obtener solo la propiedad "nombre".

Trabajando Con Archivos y Directorios

Puedes hacer prácticamente todo a lo que estás acostumbrado: navegar a varios directorios, listar archivos y sub-directorios, examinar el contenido de archivos, crear directorios y archivos, etc.

Trabajando Con Otros Proveedores

Con PowerShell, puedes tratar muchas cosas como sistemas de archivos y navegar usando cd y revisar sus contenidos usando ls/dir. Aquí hay algunos proveedores adicionales:

Revisemos el ambiente y veamos qué variables de entorno Go-related están ahí (en mi maquina):

Formateando

PowerShell fomenta componer cmdlets con switches estándar y creando flujos de información. Formatear es un concepto explícito en donde en el final de un flujo de información pones un formateador. PowerShell por defecto examina el tipo de objeto u objetos al final del tubo y aplica el formateador por defecto. Pero puedes anularlo especificando tu mismo el formateador. Los formateadores son solo cmdlets. Aquí está la salida previa mostrada en formato de lista:

El Perfil

Los usuarios avanzados que usan la línea de comando frecuentemente tienen muchas tareas, flujos de información y combinaciones favoritas de comando con los switches por defecto que ellos prefieren. El perfil de PowerShell es un archivo de script PowerShell que es cargado y ejecutado siempre que inicias una nueva sesión. Puedes poner todo lo bueno ahí, crear alias y funciones, establecer variables de entorno y prácticamente todo lo demás.

Me gusta crear aliases de navegación para directorios profundamente anidados, activar entornos virtuales de Python y crear atajos para comandos externos que ejecuto frecuentemente, como git y docker.

Para mí, el perfil es indispensable porque los comandos legibles y consistentes y switches de PowerShell son frecuentemente verbosos, y los aliases integrados son frecuentemente más un problema que una ayuda (discutiré esto más adelante). Aquí hay un muy parcial snippet de mi perfil:

El Prompt

PowerShell te permite personalizar tus línea de comandos. Necesitas definir una función llamada prompt(). Puedes ver la función prompt integrada:

Aquí hay una función prompt personalizada que muestra el tiempo actual en adición al directorio actual:

PS C:\Users\the_g> function prompt {"$(get-date) $(get-location) > "}

Puedes alocarte, por supuesto, y agregar colores y revisar varias condiciones como si estás en un repositorio particular de git o si eres admin.

Aliases: El Lado Oscuro

PowerShell entiende los aliases mal, en mi opinion, en dos frentes separados. Primero, el comando alias solo permite el renombrado de comandos, No puedes agregar banderas comunes u opciones para hacer comandos más útiles haciendo alises a ellos mismos.

Por ejemplo, si quieres buscar en  texto línea por línea, puedes usar el cmdlet Select-String:

Eso funciona, pero a mucha gente le gustaría renombrar Select-String a grep. Pero grep es por defecto sensible a mayúsculas, mientras que Select-String no. No es gran cosa, solo agregaremos la bandera -CaseSensitive, como:

Set-Alias -Name grep -Value "Select-String -CaseSensitive"

Desafortunadamente, eso no funciona:

El valor de un alias debe ser ya sea un cmdlet, una función, un script o un programa. No se permiten banderas o argumentos.

Ahora, puedes hacer eso bastante fácil en PowerShell, pero tendrás que usar funciones y no aliases. Eso prácticamente limita a los aliases a simple renombramiento, lo cuál también puede ser hecho por funciones.

PowerShell vs. Bash

En el lado interactivo de shell, PowerShell y Bash son bastante iguales. Bash es más conciso por defecto, pero el flujo de objetos de PowerShell hace flujos complicados más manejables. ,

Dicho eso, puedes probablemente lograr cualquier cosa con ya sea uno y si eres un usuario avanzado entonces tendrás tus propios aliases, funciones y atajos para tareas comunes. En el lado del scripting, PowerShell va más allá que Bash, y para propósitos de administración de sistema incluso vence a Python, Ruby y compañía.

Un aspecto importante es su disponibilidad. Bash viene pre-instalado con la mayoría de las distribuciones *nix (a menos que esté despojada específicamente) incluyendo macOS. También puede ser instalado en Windows vía cygwin, git-bash o msys. PowerShell viene pre-instalado en Windows y solo recientemente se volvió disponible en Mac y Linux.

Conclusión

Si usas Windows como máquina de desarrollo o si administras máquinas Windows entonces PowerShell es una herramienta indispensable. Es verdaderamente un bien pensado superconjunto de las cáscaras del Unix, y viene preinstalado.

PowerShell es un gran software de ingeniería en funcionamiento. Evolucionó a lo largo de una década y se mantuvo innovando mientras mantenía su integridad conceptual original. El reciente cambio a código abierto y multi-plataforma indica que aún hay mucho más por lo que esperar.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.