¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. PowerShell Core y Windows PowerShell
  3. Perfiles PowerShell
Extrait - PowerShell Core y Windows PowerShell Los fundamentos del lenguaje (2a edición)
Extractos del libro
PowerShell Core y Windows PowerShell Los fundamentos del lenguaje (2a edición) Volver a la página de compra del libro

Perfiles PowerShell

Introducción

La noción de perfil es una noción familiar para los profesionales IT como nosotros ya que existen desde hace mucho tiempo en Windows con, entre otros, el famoso «perfil Windows» (que puede ser local o remoto), así como el perfil de Outlook. Un perfil es simplemente un archivo (o conjunto de archivos) que contiene las preferencias del usuario.

Tendrá a partir de ahora que componer perfiles adicionales, los de PowerShell. Y pueden ser numerosos, ya que ¡podemos crear hasta una decena diferentes si así lo deseamos! Los perfiles PowerShell son sencillamente scripts ejecutados automáticamente al arrancar la consola PowerShell, y eso en un orden determinado. Permiten configurar nuestro entorno PowerShell para, por ejemplo, cargar automáticamente funciones o asignar ciertas variables. Veremos varios casos de uso en este capítulo.

Una noción importante que debe conocer asociada a los perfiles PowerShell es la de «símbolo del sistema». El símbolo del sistema es un entorno de ejecución PowerShell.

De partida, conocemos dos símbolos del sistema que son la consola clásica y la consola gráfica ISE, aunque existen, sin embargo, muchos otros, como Visual Studio Code, PowerGUI, etc. Cada uno de estos símbolos del sistema puede, si lo desea, tener en cuenta los perfiles que le son propios.

Perfiles disponibles

Podemos determinar la lista de perfiles que se pueden utilizar en el símbolo del sistema en ejecución - aquí la consola Windows PowerShell estándar - gracias al siguiente comando:

PS > $profile | Format-List * -force 
 
AllUsersAllHosts       :  
C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1 
AllUsersCurrentHost    : C:\Windows\System32\WindowsPowerShell\v1.0\ 
Microsoft.PowerShell_profile.ps1 
CurrentUserAllHosts    : C:\Users\Arnaud\Documents\ 
WindowsPowerShell\profile.ps1 
CurrentUserCurrentHost : C:\Users\Arnaud\Documents\ 
WindowsPowerShell\Microsoft.PowerShell_profile.ps1 
Length                 : 80 

Podemos observar que se nos ofrecen cuatro perfiles diferentes. Veremos más adelante a qué se corresponde cada uno de estos perfiles. Observe que, si bien están referenciados en la variable $profile, ninguno de estos archivos está creado. Es algo que debe hacer usted.

La misma línea de comando aplicada al entorno ISE nos devolverá un resultado ligeramente distinto:

PS > $profile | Format-List * -force 
 
AllUsersAllHosts       : C:\Windows\System32\WindowsPowerShell\v1.0\ 
profile.ps1 
AllUsersCurrentHost    : C:\Windows\System32\WindowsPowerShell\v1.0\ ...

Orden de aplicación de perfiles

El orden de aplicación de perfiles es importante. PowerShell los aplica en el siguiente orden:

1. AllUsersAllHosts

2. AllUsersCurrentHost

3. CurrentUserAllHosts

4. CurrentUserCurrentHost

Como de costumbre son los parámetros los más cercanos al usuario los prioritarios y por lo tanto se aplican en último lugar. Por ejemplo, si define varias veces la misma variable en sus perfiles, será la última definición la que tendrá la última palabra.

Creación de un perfil

Por defecto, ningún perfil está creado. El método más simple para crear su perfil consiste en apoyarse en la variable $profile. Efectivamente, como hemos visto anteriormente, esta variable contiene en sus propiedades las rutas hacia los distintos perfiles que PowerShell tiene en cuenta.

Ahora vamos a crear un perfil que será común a todas las consolas (o símbolos del sistema) pero que se aplicará solo a nosotros. Para ello, debemos elegir la propiedad CurrentUserAllHosts de la variable $profile.

Verifiquemos primero hacia qué carpeta apunta esta propiedad:

PS > $profile.CurrentUserAllHosts 
 
C:\Users\Arnaud\Documents\WindowsPowerShell\profile.ps1 

Para crear su perfil, teclee el comando:

PS > New-Item -Path $profile.CurrentUserAllHosts -ItemType file -Force 

-force permite aquí crear la jerarquía de carpetas si esta no existe al crear el archivo.

Enhorabuena, su perfil se ha creado pero ocupa cero bytes ya que está vacío. Para modificarlo con el editor gráfico ISE, teclee el siguiente comando:

PS > ise $profile.CurrentUserAllHosts 
Puede hacer lo mismo con Visual Studio Code escribiendo el siguiente comando:
PS > code $profile.CurrentUserAllHosts 

Ahora está preparado para personalizar su entorno preferido. Podría por ejemplo cambiar el color de fondo de la ventana, su tamaño, el color de las caracteres, añadir...

Personalización del entorno

Todo lo que vamos a ver ahora es para que lo incluya en su perfil. Deberá elegir lo que más se adecue a sus necesidades.

1. Modificación del prompt

El prompt es el conjunto de caracteres que indican que el equipo está listo para que los comandos se puedan introducir.

Por defecto, tiene el siguiente aspecto: PS RUTA_ACTUAL>

Se encontrará al arrancar PowerShell en el directorio raíz de su perfil Windows, o sea en Windows 10 y Windows Server 2016: C:\Users\NombreDelUsuario.

Aquí tiene el prompt por defecto:

images/EI09-01.PNG

Prompt por defecto al arrancar la consola

PowerShell Core le sitúa por defecto en la carpeta de instalación, que en Windows es C:\Program Files\PowerShell\6.0.0.

Para modificar el prompt, basta con redefinir la función Prompt de PowerShell. Veamos primero qué contiene en su configuración de origen. Para visualizar su contenido, vamos a invocar al proveedor Function gracias a su lector function: como se muestra a continuación:

PS > Get-Content function:prompt 
"PS $($executionContext.SessionState.Path.CurrentLocation)` 
$('>' * ($nestedPromptLevel + 1)) " 
# .Link 
# http://go.microsoft.com/fwlink/?LinkID=225750 
# .ExternalHelp System.Management.Automation.dll-help.xml 

La función Prompt llama a la variable automática $executionContext que representa el contexto de ejecución del símbolo del sistema actual. Mirándola de cerca, podemos comprender las siguientes cosas:

  • Recupera la ruta actual (0).

  • Duplica el carácter > tantas veces como niveles tiene el prompt actual (1).

  • Concatena las cadenas anteriores para obtener una cadena como sigue: PS (0)(1)

$nestedpromptlevel indica si nos encontramos en un entorno embebido. Si esta variable contiene un número superior a cero, significa que nos encontramos en un entorno embebido (caso particular cuando se está depurando).

Resulta muy fácil redefinir la función Prompt, así podemos por ejemplo decidir eliminar del prompt la ruta actual ya que, muchas veces debido a esto, el prompt es infinitamente largo. Por lo tanto cuando navegamos por una jerarquía de directorios profunda, nuestra línea de comandos no cabe en una sola línea haciendo incómoda la lectura. Sin embargo, para no privarnos de esta información interesante...

Ejecutar PowerShell sin perfil

En ciertos casos, es necesario lanzar PowerShell sin perfil para no alargar inútilmente el tiempo de apertura de la consola y/o para estar seguro de no molestar la correcta ejecución de un script. Esto resulta muy útil para ejecutar scripts PowerShell mediante una tarea programada.

Los ejecutables PowerShell.exe (Windows PowerShell) y pswh.exe (PowerShell Core) poseen para ello el parámetro -Noprofile.

Así podemos escribir, por ejemplo, la línea de comandos siguiente para iniciar PowerShell ignorando cualquier perfil y ejecutar miScript.ps1:

PS > pwsh.exe -noprofile -file ./miScript.ps1 

Existen numerosos parámetros disponibles. Para obtener una lista exhaustiva, teclee powershell.exe /?  o pwsh;exe / ? .