Compartir a través de


Personalización del entorno de shell

Un perfil de PowerShell es un script que se ejecuta cuando se inicia PowerShell. Puede usar el perfil para personalizar el entorno. Puede:

  • agregar alias, funciones y variables
  • cargar módulos
  • crear unidades de PowerShell
  • ejecutar comandos arbitrarios
  • y cambiar la configuración de preferencias

Aplicar esta configuración en el perfil garantiza que esté disponible cada vez que inicie PowerShell en el sistema.

Nota:

Para ejecutar scripts en Windows, la directiva de ejecución de PowerShell tiene que establecerse en RemoteSigned como mínimo. Las directivas de ejecución no se aplican a macOS ni Linux. Para obtener más información, consulte about_Execution_Policy.

Variable $PROFILE

La variable automática $PROFILE almacena las rutas de acceso a los perfiles de PowerShell que están disponibles en la sesión actual.

Hay cuatro perfiles posibles disponibles para admitir distintos ámbitos de usuario y diferentes hosts de PowerShell. Las rutas de acceso completas de cada script de perfil se almacenan en las propiedades de miembro de $PROFILE que se indican a continuación.

  • AllUsersAllHosts
  • AllUsersCurrentHost
  • CurrentUserAllHosts
  • CurrentUserCurrentHost

Puede crear scripts de perfil que se ejecuten para todos los usuarios o solo uno, el CurrentUser. Los perfiles CurrentUser se almacenan en el directorio principal del usuario.

También hay perfiles que se ejecutan para todos los hosts de PowerShell o hosts específicos. El script de perfil para cada host de PowerShell tiene un nombre único para ese host. Por ejemplo, el nombre de archivo del host de consola estándar en Windows o la aplicación de terminal predeterminada en otras plataformas es Microsoft.PowerShell_profile.ps1. En el caso de Visual Studio Code (VS Code), el nombre de archivo es Microsoft.VSCode_profile.ps1.

Para obtener más información, consulte about_Profiles.

De manera predeterminada, al hacer referencia a la variable $PROFILE, se devuelve la ruta de acceso al perfil "Current User, Current Host". Se puede acceder a la ruta de otros perfiles a través de las propiedades de la variable $PROFILE. Por ejemplo:

PS> $PROFILE
C:\Users\user1\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
PS> $PROFILE.AllUsersAllHosts
C:\Program Files\PowerShell\7\profile.ps1

Cómo crear su perfil personal

Al instalar PowerShell por primera vez en un sistema, los archivos de script de perfil y los directorios a los que pertenecen no existen. El comando que se indica a continuación crea el archivo de script de perfil "Current User, Current Current Host" si no existe.

if (!(Test-Path -Path $PROFILE)) {
  New-Item -ItemType File -Path $PROFILE -Force
}

El parámetro Force del cmdlet New-Item crea las carpetas necesarias si no existen. Una vez creado el archivo de script, puede usar su editor favorito para personalizar el entorno de shell.

Adición de personalizaciones al perfil

En los artículos anteriores se ha hablado sobre el uso de la finalización con tabulación, los predictores de comandos y los alias. En estos artículos se mostraban los comandos utilizados para cargar los módulos requeridos, crear completadores personalizados, definir enlaces de teclado y otras opciones de configuración. Estos son los tipos de personalizaciones que desea tener disponibles en cada sesión interactiva de PowerShell. El script de perfil es el lugar para esta configuración.

La forma más sencilla de editar el script de perfil es abrir el archivo en el editor de código que prefiera. Por ejemplo, el comando a continuación abre el perfil en VS Code.

code $PROFILE

También puede usar notepad.exe en Windows, vi en Linux o cualquier otro editor de texto.

El script de perfil a continuación tiene ejemplos de muchas de las personalizaciones mencionadas en los artículos anteriores. Puede usar cualquiera de estas opciones de configuración en su propio perfil.

## Map PSDrives to other registry hives
if (!(Test-Path HKCR:)) {
    $null = New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT
    $null = New-PSDrive -Name HKU -PSProvider Registry -Root HKEY_USERS
}

## Customize the prompt
function prompt {
    $identity = [Security.Principal.WindowsIdentity]::GetCurrent()
    $principal = [Security.Principal.WindowsPrincipal] $identity
    $adminRole = [Security.Principal.WindowsBuiltInRole]::Administrator

    $prefix = $(if (Test-Path variable:/PSDebugContext) { '[DBG]: ' }
                elseif ($principal.IsInRole($adminRole)) { "[ADMIN]: " }
                else { '' })
    $body = 'PS ' + $(Get-Location)
    $suffix = $(if ($NestedPromptLevel -ge 1) { '>>' }) + '> '
    $prefix + $body + $suffix
}

## Create $PSStyle if running on a version older than 7.2
## - Add other ANSI color definitions as needed

if ($PSVersionTable.PSVersion.ToString() -lt '7.2.0') {
    # define escape char since "`e" may not be supported
    $esc = [char]0x1b
    $PSStyle = [pscustomobject]@{
        Foreground = @{
            Magenta = "${esc}[35m"
            BrightYellow = "${esc}[93m"
        }
        Background = @{
            BrightBlack = "${esc}[100m"
        }
    }
}

## Set PSReadLine options and keybindings
$PSROptions = @{
    ContinuationPrompt = '  '
    Colors             = @{
        Operator         = $PSStyle.Foreground.Magenta
        Parameter        = $PSStyle.Foreground.Magenta
        Selection        = $PSStyle.Background.BrightBlack
        InLinePrediction = $PSStyle.Foreground.BrightYellow + $PSStyle.Background.BrightBlack
    }
}
Set-PSReadLineOption @PSROptions
Set-PSReadLineKeyHandler -Chord 'Ctrl+f' -Function ForwardWord
Set-PSReadLineKeyHandler -Chord 'Enter' -Function ValidateAndAcceptLine

## Add argument completer for the dotnet CLI tool
$scriptblock = {
    param($wordToComplete, $commandAst, $cursorPosition)
    dotnet complete --position $cursorPosition $commandAst.ToString() |
        ForEach-Object {
            [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
        }
}
Register-ArgumentCompleter -Native -CommandName dotnet -ScriptBlock $scriptblock

En este script de perfil se dan ejemplos de la personalización siguiente:

  • Agrega dos nuevos PSDrive para los otros subárboles del Registro raíz.
  • Crea una indicación personalizada que cambia si se ejecuta en una sesión con privilegios elevados.
  • Configura PSReadLine y agrega el enlace de teclado. La configuración de color usa la característica $PSStyle para definir la configuración de color ANSI.
  • Agrega la finalización con tabulación para la herramienta de la CLI de dotnet. La herramienta proporciona parámetros para ayudar a resolver los argumentos de la línea de comandos. El bloque de script de Register-ArgumentCompleter usa esa característica para proporcionar la finalización con tabulación.