La Escuela del Programador

 

Alias en PowerShell

Los alias en PowerShell permiten el uso de comandos a los que estamos acostumbrados. Los usuarios de Windows pueden utilizar comandos como dir, move, type, cls, etc ..., mientras que PowerShell, también proporciona un conjunto de alias para Linux (ls, pwd, mv, man, cat, etc). Los alias de PowerShell se proporcionan con el fin de permitir a los usuarios nuevos, la capacidad de interactuar rápidamente con el sistema. Un alias es un nombre alternativo asignado a un cmdlet. Por ejemplo, "dir" es un alias para "Get-ChildItem." En este artículo presentaremos los dos tipos de alias que existen en PowerShell:

  • Alias predefinidos: nombres predefinidos alternativos para Windows, Unix, y cmdlets de PowerShell.
  • Alias definidos por el usuario: nombres personalizados alternativos creados por el usuario.

 

Alias predefinidos

Para obtener una lista de todos los Alias predefinidos existentes en PowerShell, usemos el siguiente cmdlet:

 

 
Get-Alias <enter>

Ver figura 1, para observar la salida de dicho comando:

Figura 1 - Get-Alias devuelve la lista de alias disponibles en PowerShell.


Si nos detenemos a ver la lista obtenida con el cmdlet anterior, notaremos que existen múltiples alias para el cmdlet "Get-ChildItem". (el comando de Windows "dir", el comando de Unix "ls", y un alias propio de PowerShell: "gci"). No importa cuál alias elija usar, escribiendo cualquiera de los alias, resultará en la real corrida del cmdlet "Get-ChildItem". Probemos esto en la consola de PowerShell, escribiendo los siguientes cmdlets:

dir <enter>
ls <enter>
gci <enter>
Get-ChildItem <enter>
Figura 2 - Comprobación que usar get-childitem es equivalente a usar cualquiera de sus 3 alias.

 

 

 

 

 

 


Alias definidos por el usuario

Supongamos que queremos crear un alias personalizado ("gs") para el cmdlet "Get-Service". Para eso simplemente usamos el cmdlet:

 

 

 

 

 

 

Set-Alias gs Get-Service <enter>

Probemos nuestro nuevo alias:

 
gs <enter>
Figura 3 - Creación y prueba de un nuevo alias para un cmdlet.


Vemos que realmente es muy fácil crear un alias definido por el usuario... pero esto tiene un problemita: Los alias definidos por el usuario, "viven" sólo mientras la sesión de PowerShell esté activa. Tan pronto como usted cierre la sesión, su alias dejará de existir. Cierre la ventana de la consola de PowerShell y vuelva a arrancarlo nuevamente. Trate de usar el alias "gs", y recibirá el siguiente error: "El término 'gs' no se reconoce como nombre de un cmdlet, función, archivo de script o programa ejecutable. Compruebe si escribió correctamente el nombre o, si incluyó una ruta de acceso, compruebe que dicha ruta es correcta e inténtelo de nuevo. Para que se reconozca el alias, debemos crearlo nuevamente:

Set-Alias gs Get-Service <enter>

De esta manera, hemos creado un alias de PowerShell definido por el usuario y ahora no queremos perderlo cuando cerremos la sesión. Para que pase esto, tenemos dos opciones:

  1. Importar/Exportar el alias definido por el usuario.
  2. Alias definidos por el usuario usando PowerShell Profiles.

 

Importar/Exportar el alias definido por el usuario

El propósito de importar y exportar es hacer los alias definidos por el usuario disponibles a múltiples máquinas. Digamos que usted escribió un script que usa un alias personalizado. Si trata de correr su script en otra máquina, fallará. La sesión remota de PowerShell no conoce el alias personalizado que usted ha creado, a menos que, exporte el alias a un archivo de texto, que la computadora remota podria usar para importarlo. Vamos a exportar el alias "gs" usando el cmdlet "Export-Alias":

 

 Export-Alias -Path Aliases.txt <enter>

Como estamos corriendo PowerShell desde el directorio "C:\MisScriptsPS" el archivo Aliases.txt será creado allí. Use el parámetro "-Path" para configurar la localización deseada. Una opción es grabar el archivo de exportación en un path UNC, así será disponible desde un share de red. Abramos "Aliases.txt" en notepad:

 
PS C:\MisScriptsPS>notepad Aliases.txt <enter> 

Abramos con el notepad el archivo Aliases.txt...¿Nota algo raro en él? Ver figura 4:

Figura 4 - El archivo de exportación comprende todos los alias existentes, no solo los personalizados.


Como vemos en la figura 4, no solo se exportó el alias que queríamos exportar ("gs"), sino que se exportaron todos los alias de PowerShell. Este es un problema, ya que si tratamos de importar el archivo Aliases.txt, PowerShell reportará un error para cada alias que ya exista. Tratemos de importar el archivo Aliases.txt usando el cmdlet "Import-Alias":

 Import-Alias -Path Aliases.txt <enter> 

En la figura 5, vemos que efectivamente esto genera un error para cada alias ya existente:

Figura 5 - Al tratar de importar el archivo Aliases.txt, se genera un error para los alias ya existentes.


Si bien esto se ve feo, en realidad al correr este cmdlet, habremos importado el alias personalizado "gs", debido a que no existía en el momento de correr el cmdlet. Pero hay una mejor manera de hacer esto, para evitar los errores generados cuando se importa el archivo: Usando el parámetro -Name, podremos exportar solamente el alias que querramos exportar. Así para exportar solo el alias "gs", escribamos lo siguiente:

 
Export-Alias -Path Aliases.txt -Name gs <enter> 
notepad Aliases.txt <enter> 

Como vemos en la figura 6, ahora solo se exporta el alias personalizado:

Figura 6 - Ahora el archivo Aliases.txt, sólo contiene el alias que queremos exportar/importar.


Esto luce mucho mejor!… Si ahora tratamos de importar este archivo, el resultado dependerá de si aún tenemos la sesión de PowerShell activa, (en cuyo caso se producirá un error debido a que el alias "gs" existe en la sesión actual) o si hemos inciado una nueva sesión (en cuyo caso, sí se producirá la importación). Salgamos de la sesion actual de PowerShell y relancemos la consola. Ahora importemos el archivo y llamamemos al alias, como sigue:

Import-Alias -Path Alias.txt <enter> 
gs <enter> 

Obtendremos una salida limpia como se ve en la figura 7:

Figura 7 - El archivo aliases.txt finalmente se exporta en cualquier nueva sesión de PowerShell.


Importar y Exportar, permite el uso de alias definidos por el usuario en sistemas, tanto locales como remotos. Pero...¿Qué debería hacer en caso que usted quiera usar alias personalizados en su sistema local y no quiera tener que importar un archivo cada vez que lance PowerShell? La respuesta es PowerShell profiles. Los perfiles de PowerShell permiten personalizar el entorno de PowerShell en tiempo de lanzamiento. A continuación veremos perfiles, pero sólo en lo que atañe a alias definidos por el usuario. Con Profiles, hay muchas opciones para personalizar su entorno PowerShell, las que cubriremos en próximos artículos.

 

 

 

 

 


Alias definidos por el usuario usando Perfiles PowerShell

¿Qué es un perfil PowerShell? En pocas palabras, un profile es un script que corre al inicar una sesión. El perfil es almacenado en la variable $Profile, la que por defecto está en "My Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1" Para verificar la localización de su perfil escriba:

 

 

 

 

 

 

$Profile <enter> 

En la figura 8 vemos la ruta a mi perfil:

Figura 8 - El perfil es almacenado en Mis Documentos dentro de una carpeta y como un archivo ps1.

 

 

 

 

 

 

 


El profile es un script y como tal su extensión es ".ps1". Todos los script de PowerShell son identificados por esta extensión. Debido a que el perfil es un script, necesitamos editarlo y crearlo. Podemos usar cualquier editor de PowerShell, aunque en este artículo usaremos Notepad.

Antes de editar el archivo necesitamos chequear la política de ejecución de PowerShell. Por defecto, cuando se instala PowerShell es instalado con la política de ejecución "Restricted". Esto significa que con esta configuración, PowerShell no correrá ni scripts ni archivos de configuración. Esta es la lista de todos los niveles de política disponibles:

  • Restricted – Ya sabemos lo que esto significa.
  • AllSigned– Todos los scripts y los archivos de configuración deben ser firmados por un editor de confianza.
  • RemoteSigned – Todos los scripts y los archivos de configuración bajados de Internet deben ser firmados por un editor de confianza.
  • Unrestricted – Todos los scripts y los archivos de configuración, correrán. Scripts bajados de Internet pedirán permiso antes de correr.

Para verificar el nivel de política de ejecución de PS, usamos el cmdlet "Get-ExecutionPolicy":

 
Get-ExecutionPolicy <enter>

¿Cómo debemos configurar nuestra política? Como el perfil es un archivo de script, la política de ejecución debe ser establecida a cualquier cosa diferente a que "Restricted". Para nuestro caso, configuraremos la política como "Unrestricted". Para ello corremos el siguiente cmdlet:

 
Set-ExecutionPolicy Unrestricted <enter>

Ahora que la política permite correr scripts, creemos un perfil siguiendo los siguientes pasos:

test-path $Profile <enter>
New-Item -Path $Profile -ItemType file -Force <enter>
  1. Verificar la existencia de un perfil.
  2. Si el resultado = False. No existe perfil (continúe con el paso 2). Si el resultado = True. Existe el perfil (salte los pasos 2 y 3, a menos que quiera crear un nuevo perfil, que borrará el existente).
  3. Crear un nuevo perfil.
  4. Verificar que el nuevo perfil fue creado.
  5. Repita el paso 1. El resultado debe ser “True”.

Abramos nuestro nuevo profile en notepad:

 
notepad $Profile <enter>

En la figura 9 vemos que el archivo esta aún vacío:

Figura 9 - Ya hemos creado el script pero aún esta vacío.
Tal como dijimos en el artículo Comandos en PS:cmdlet PowerShell permite tambien correr comandos nativos de Windows. En el código anterior vemos que podemos correr el Notepad directamente desde la consola de PowerShell, usando precisamente un comando nativo.


Hemos creado un script llamado "Microsoft.PowerShell_profile.ps1". Este script será llamado usando la variable $Profile cada vez que una sesión de PowerShell sea iniciada. Dentro de este script, irá lo que decidamos necesitamos para configurar nuestro entorno de PowerShell. Por ahora, sólo hagamos que al cargar nuestro perfil, cargue o importe nuestro alias definido por el usuario. Para eso, editemos el perfil como sigue y grabemos:

 

Figura 10 - Agregamos al script el cmdlet que crea nuestro alias personalizado.

Después que haya grabado el perfil, cierre notepad, y termine la sesión de PowerShell. Lance una nueva sesión de PowerShell y verifique que ahora su alias personalizado (gs) es totalmente funcional:

gs <enter>

Ahora si! Su perfil se ha cargado exitosamente y su alias está trabajando. Use el cmdlet "Get-Alias" para verificar la existencia de su nuevo alias:

 
Get-Alias <enter>

o haga una búsqueda más refinada:

 
Get-Alias -Name gs <enter>

Espero que hay disfrutado este artículo sobre Alias de PowerShell, ya que hemos cubierto muchos temas (Alias predefinidos, alias definidos por el usuario, importando alias, exportando alias, un corto preview sobre profiles, y por último hemos visto nuestro primer archivo de script de PowerShell). Seguiremos viendo más, en próximos artículos de PowerShell Saludos!

respag
Panamá - © 2012
http://respag.net/alias-en-powershell.aspx