Skip to main content

El which Que Necesita Powershell

· 4 min read
Gustavo Mejía
Developer and Electronic Engineer

Banner-which

🧩 El Problema

Una de las cosas más frustrantes cuando empecé a usar powershell es ¿Qué comando estoy ejecutando aquí? Yo vengo del terminal de linux y realmente me pareció increíble que powershell tuviera los comandos como ls o curl, y pensé "ok, esto es como linux" y estaba feliz porque podía trabajar igual. Y fue así hasta un día que necesitaba saber si existía una variable de entorno. Un sencillo env para saber si existía, Y de repente descubrí que el comando que necesitaba es ls env:

...Espera un momento, ¿Por qué se necesita el comando ls para las variables de entorno? ¿Por qué tengo que colocar el :? ¿Las variables de entorno son una carpeta. Algo así como si estuviéramos hablando de un disco C://?.

Otro problema que encontré fue cuando estaba revisando cómo ejecutar powershell como admin y cada foro lo ejecutaba como quisiera.

  # Todos estos comandos hacen lo mismo

start powershell -verb runas
start-process powershell -verb runas
StArT-PrOcEsS pwsh.exe -VeRb runas
saps pwsh -verb runas

entonces ¿Qué está pasando aquí?. Ahí fue cuando descubrí que powershell es CASE INSENSITIVE ¿A quien se le ocurre usar palabras reservadas con case insensitive? Bueno, nada que hacer, eso es lo que hay.

Omitiendo eso me pareció curioso que usen un estandar de <verb>-<command> esto me pareció una genialidad. Que puedas saber exactamente qué comando estas usando, si leer/escribir/borrar/llamar etc. Pero bueno esto no es tan divertido cuando estas hablando de comandos del día a día, ¿Te imaginas estar trabajando y te toca usar get-content todo el día?. Eso explica por qué la necesidad de usar aliases

Pero entonces quieres usar curl, pero descubriste que también existe el wget. Y te preguntas ¿Qué otro comando existe para Invoke-WebRequest? Tocará buscar un which. Aquí es donde entra el comando get-command. Puedes mandarle cualquier entrada: una función, un comando, o un alias

  Get-Command <your-command-alias-function>

y te da la ubicación, que tipo es y el nombre de tu comando. Si le pasas un alias este te retorna el nombre del comando al que apunta.

Pero si lo que quieres es saber si existen más aliases asociados. Para eso existe el get-aliases. Aunque para este comando tienes que saber que le estas mandando. Si le mandas un comando debes usar

  Get-Alias -Definition <your-command>

Pero si es un Alias debes usar

  Get-Alias -Definition (get-alias <your-alias>).Definition

de otra forma arroja error

Y pues quiero saber cuales son todos los alias asociados a un comando. ¿A caso es mucho pedir querer eso en un comando sencillo de which?

😎 Solución (Get-CommandAliases)

Aquí es donde entra esta solución. El comando Get-CommandAliases te retorna la información de lo que necesites en un sencillo empaquetamiento.

PS C:\> get-commandAliases ls

CommandType Name Aliases Source
----------- ---- ------- ------
Cmdlet Get-ChildItem dir,gci,ls Microsoft.PowerShell.Management

PS C:\> get-commandAliases get-childItem

CommandType Name Aliases Source
----------- ---- ------- ------
Cmdlet Get-ChildItem dir,gci,ls Microsoft.PowerShell.Management

PS C:\> which start

CommandType Name Aliases Source
----------- ---- ------- ------
Cmdlet Start-Process saps,start Microsoft.PowerShell.Management

Es una combinación del get-command pero incluyendo la salida del get-aliases -Definition. De esa forma se puede averiguar cuales son los aliases asociados a un comando y puede recibir cualquier entrada

📦 Como instalarlo

Cambia al directorio de módulos y clona el repositorio

cd ($env:PSModulePath -split ';')[0]
git clone 'https://github.com/athesto/Get-CommandAliases'
help get-CommandAliases
which iwr

🏆 Conclusión

  • Ya no tienes que pensar si lo que estás ejecutando es un Cmdlet o un Alias.

  • Todo se simplifica a which <nombre>.

  • Piensa en esto como Get-Command, pero con columna de aliases incluida.

Hello world

· 2 min read
Gustavo Mejía
Developer and Electronic Engineer

Bueno… bienvenida o bienvenido a este blog. Es la primera vez que hago esto, y la verdad no estoy muy seguro de cómo empezar.

Estoy pensando en cómo quiero organizar mis ideas y en cómo expresarlas: ¿debería escribir como si esto fuera para alguien más o simplemente escribir para mí mismo? Por ahora, creo que lo mejor será dejar que las ideas salgan tal cual están en mi cabeza, plasmarlas aquí y luego ver qué pasa.

No quiero que esto sea un diario como tal, pero sí una forma de documentar un proceso. No se trata solo de crear contenido, sino también de registrar la experiencia que tengo mientras lo creo.

¿Cómo lo haré?

Tengo una forma sencilla de trabajar: primero elijo una idea, luego la desarrollo. Y con la ayuda de la inteligencia artificial, organizo y redacto el texto para darle forma.

¿Cuál es la idea principal?

Mi idea principal con este blog es tener un espacio donde pueda mostrar mis ideas. Pero no solo eso: también quiero que esas ideas estén organizadas, con estructura, y que se almacenen en una carpeta especial dentro de mi proyecto.

Espero que disfrutes lo que viene. Esto es solo el comienzo.