Modificar el prompt en PowerShell

PowerShell ofrece muchas maneras de hacernos felices y una de ellas es la customización de la consola 🙂

Hoy quiero compartir como modificar el prompt de nuestra consola para darle un toque más personalizado y/o diferente.

Así es como se ve por defecto:

Consola de PowerShell

Primeros pasos

Lo primero que me gustaría compartir es cómo hacer para poder modificar nuestro perfil en PowerShell, para ello, debemos situarnos en la ruta de nuestro perfil dentro de la carpeta documentos, ahí van a encontrar la carpeta WindowsPowerShell y dentro de ella, el archivo Microsoft.PowerShell_profile.ps1

En mi caso la ruta completa es: C:\Users\Victor\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

Ahora bien, teniendo ubicado el archivo a modificar vamos a ver algunas cosas.

Primero debemos definir, por ejemplo, una función en donde poder ubicar nuestros cambios. Para ser consecuente, voy a generar una función llamada prompt, donde le voy a indicar que me devuelta (return) el símbolo numeral (o sharp):

  function Prompt {
    return "#"
  }

Si guardamos los cambios y ejecutamos una nueva consola de PowerShell vamos a ver lo siguiente:

Consola con el # como prompt

Ya con esto podemos hacer algunas modificaciones, como: “

” o “ ->”

O agregar una variable, de la siguiente manera utilizando la hora:

  function Prompt {
    Write-Host ("[") -nonewline
    Write-Host (Get-Date -format HH:mm:ss) -nonewline
    Write-Host ("] #") -nonewline
    return " "
  }

Dejando el símbolo numeral, como separador (para que quede más ordenado).

Agregando colores

Teniendo la base anterior, podemos tomar la función y agregarle un poco de color y algún símbolo más:

  function Prompt { 
    Write-Host ("[") -nonewline -foregroundcolor DarkGray 
    Write-Host (Get-Date -format HH:mm:ss) -nonewline 
    Write-Host ("] ") -nonewline -foregroundcolor DarkGray 
    Write-Host ($PWD) -nonewline -foregroundcolor Green 
    Write-Host (" | ") -nonewline -foregroundcolor DarkGray
    Write-Host ("#") -nonewline -foregroundcolor Yellow
    return " "
  }

Prompt con hora, ubicación y #

Cambiando el título de la ventana

También podemos hacerle cambios visuales al título de la ventana, como en este ejemplo, agregando mi nombre y la versión de PowerShell:

  (Get-Host).UI.RawUI.WindowTitle =  "Victor" + " (v" + (Get-Host).Version + ")"

Título cambiado

Revisando privilegios

Adicional a lo anterior podemos realizar una comprobación de privilegios, comprobando si el usuario ejecutó la sesión como administrador con la siguiente función:

  function Test-Administrator {
    $user = [Security.Principal.WindowsIdentity]::GetCurrent()
    (New-Object Security.Principal.WindowsPrincipal $user).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
  }

Y agregando lo anterior a otro ejemplo de customización del prompt:

  function prompt {
    if (Test-Administrator) {  # Use different username if elevated
      Write-Host "[Adm] " -NoNewline -ForegroundColor White
    }

    Write-Host "$ENV:USERNAME" -NoNewline -ForegroundColor Green
    Write-Host "@" -NoNewline
    Write-Host "$ENV:COMPUTERNAME" -NoNewline -ForegroundColor Green

    Write-Host " : " -NoNewline
    Write-Host $($(Get-Location) -replace ($env:USERPROFILE).Replace('\','\\'), "~") -NoNewline
    Write-Host " : " -NoNewline
    Write-Host (Get-Date -Format G) -NoNewline -ForegroundColor Gray
    Write-Host " : " -NoNewline

    Write-Host ""

    return "> "
  }

El resultado es:

Comprobación de elevación de permisos

Happy scripting!

Comments