acerca de PSReadLine
Breve descripción
PSReadLine proporciona una experiencia mejorada de edición de línea de comandos en la consola PowerShell.
Descripción larga
PowerShell 7.4 se entrega con PSReadLine 2.3.4. La versión actual es PSReadLine 2.3.4. La versión actual de PSReadLine se puede instalar y utilizar en Windows PowerShell 5.1 y versiones posteriores. Para algunas funciones, debe ejecutar PowerShell 7.2 o superior.
PSReadLine proporciona una potente experiencia de edición de línea de comandos para la consola PowerShell. Proporciona:
- Coloración de sintaxis de la línea de comando.
- Una indicación visual de errores de sintaxis.
- Una mejor experiencia multilínea (tanto de edición como de historial)
- Combinaciones de teclas personalizables
- Modos cmd y emacs
- Muchas opciones de configuración
- Finalización de estilo Bash (opcional en modo Cmd, predeterminado en modo Emacs)
- Emacs tira/kill-ring
- Movimiento y eliminación de "palabras" basados en tokens de PowerShell
- IntelliSense predictivo
- Visualización dinámica de Ayuda en la consola sin perder su lugar en la línea de comando
PSReadLine requiere PowerShell 5.1 o posterior. PSReadLine funciona con el host de consola de Windows predeterminado, Windows Terminal y Visual Studio Code. No funciona en Windows PowerShell ISE.
PSReadLine se puede instalar desde la Galería PowerShell. Para instalar PSReadLine en una versión compatible de PowerShell, ejecute el siguiente comando.
Install-Module -Name PSReadLine -AllowClobber -Force
Nota
A partir de PowerShell 7.0, PowerShell omite la carga automática de PSReadLine en Windows si se detecta un programa lector de pantalla. Actualmente, PSReadLine no funciona bien con los lectores de pantalla. La representación y el formato predeterminados de PowerShell 7.0 en Windows funcionan correctamente. Puede cargar manualmente el módulo si es necesario.
IntelliSense predictivo
Predictive IntelliSense es una adición al concepto de finalización de tabulación que ayuda al usuario a completar comandos con éxito. Permite a los usuarios descubrir, editar y ejecutar comandos completos basados en predicciones coincidentes del historial del usuario y complementos adicionales específicos del dominio.
Habilitar IntelliSense predictivo
El IntelliSense predictivo está deshabilitado de forma predeterminada. Para habilitar las predicciones, simplemente ejecute el siguiente comando:
Set-PSReadLineOption -PredictionSource History
El parámetro PredictionSource también puede aceptar complementos para requisitos personalizados y específicos del dominio.
Para desactivar Predictive IntelliSense, simplemente ejecute:
Set-PSReadLineOption -PredictionSource None
Nota
Predictive IntelliSense está habilitado de forma predeterminada en PSReadLine 2.2.6. Para obtener más información, consulte el historial de versiones de PSReadLine en la sección Notas a continuación.
Atajos de teclas personalizados
PSReadLine admite combinaciones de teclas personalizadas mediante el cmdlet Set-PSReadLineKeyHandler. La mayoría de las combinaciones de teclas personalizadas llaman a una de las funciones enlazables, por ejemplo
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
Puede vincular un ScriptBlock a una clave. ScriptBlock puede hacer prácticamente cualquier cosa que quieras. Algunos ejemplos útiles incluyen
- editar la línea de comando
- abrir una nueva ventana (por ejemplo, ayuda)
- cambiar directorios sin cambiar la línea de comando
El ScriptBlock recibe dos argumentos:
$key: un objeto [ConsoleKeyInfo] que es la clave que activó el enlace personalizado. Si vincula el mismo ScriptBlock a varias claves y necesita realizar diferentes acciones según la clave, puede marcar$key. Muchos enlaces personalizados ignoran este argumento.$arg: un argumento arbitrario. En la mayoría de los casos, este sería un argumento entero que el usuario pasa desde las combinaciones de teclas DigitArgument. Si su enlace no acepta argumentos, es razonable ignorar este argumento.
Veamos un ejemplo que agrega una línea de comando al historial sin ejecutarla. Esto es útil cuando te das cuenta de que olvidaste hacer algo, pero no quieres volver a ingresar la línea de comando que ya ingresaste.
$parameters = @{
Key = 'Alt+w'
BriefDescription = 'SaveInHistory'
LongDescription = 'Save current line in history but do not execute'
ScriptBlock = {
param($key, $arg) # The arguments are ignored in this example
# GetBufferState gives us the command line (with the cursor position)
$line = $null
$cursor = $null
[Microsoft.PowerShell.PSConsoleReadLine]::GetBufferState([ref]$line,
[ref]$cursor)
# AddToHistory saves the line in history, but does not execute it.
[Microsoft.PowerShell.PSConsoleReadLine]::AddToHistory($line)
# RevertLine is like pressing Escape.
[Microsoft.PowerShell.PSConsoleReadLine]::RevertLine()
}
}
Set-PSReadLineKeyHandler @parameters
Puedes ver muchos más ejemplos en el archivo SamplePSReadLineProfile.ps1, que está instalado en la carpeta del módulo PSReadLine.
La mayoría de las combinaciones de teclas utilizan algunas funciones auxiliares para editar la línea de comando. Esas API están documentadas en about_PSReadLine_Functions.
Notas
Historial de comandos
PSReadLine mantiene un archivo histórico que contiene todos los comandos y datos que ha ingresado desde la línea de comandos. Los archivos de historial son un archivo llamado $ ($host.Name)_history.txt. En los sistemas Windows, el archivo histórico se almacena en $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine. En sistemas que no son Windows, los archivos del historial se almacenan en $env:XDG_DATA_HOME/powershell/PSReadLine o $env:HOME/.local/share/powershell/PSReadLine.
El historial puede contener datos confidenciales, incluidas contraseñas. PSReadLine intenta filtrar información confidencial. Las líneas de comando que contengan las siguientes cadenas no se escriben en el archivo de historial.
passwordasplaintexttokenapikeysecretPSReadLine 2.2.0 mejora el filtrado de datos sensibles
- Utiliza el árbol de sintaxis abstracta (AST) de PowerShell de la línea de comando analizada para buscar datos confidenciales.
Utiliza una lista de permitidos de cmdlets seguros del módulo SecretManagement para permitir que esos comandos se agreguen al historial. La lista de permitidos contiene:
Get-Secret
Get-SecretInfoGet-SecretVaultRegister-SecretVaultRemove-SecretSet-SecretInfoSet-SecretVaultDefaultTest-SecretVaultUnlock-SecretVaultUnregister-SecretVaultPor ejemplo, se permite escribir los siguientes comandos en el archivo de historial:
Get-Secret PSGalleryApiKey -AsPlainText # Get-Secret is in the allowlist
$token = Get-Secret -Name github-token -Vault MySecret
[MyType]::CallRestAPI($token, $url, $args)
$template -f $token
Los siguientes comandos no se escriben en el archivo de historial:
$token = 'abcd' # Assign expr-value to sensitive variable name.
Set-Secret abc $mySecret # Set-Secret is not in the allowlist.
ConvertTo-SecureString stringValue -AsPlainText # '-AsPlainText' is an alert.
Invoke-WebRequest -Token xxx # Expr-value as argument to '-Token'.
Get-ResultFromTwo -Secret1 (Get-Secret -Name blah -AsPlainText) -Secret2 sdv87ysdfayf798hfasd8f7ha # '-Secret2' has expr-value argument.
Si hay otros comandos que no desea escribir en los archivos de historial, puede usar el parámetro AddToHistoryHandler del cmdlet Set-PSReadLineOption. Para ver un ejemplo de cómo utilizar AddToHistoryHandler, consulte el Ejemplo 7 de Set-PSReadLineOption.
PSReadLine 2.3.4 mejora el filtrado de datos sensibles
Se mejoró la limpieza predeterminada del historial confidencial para permitir que el historial contenga acceso seguro a la propiedad.
Cuando la cadena confidencial es parte de un acceso a la propiedad:
- Si esta operación de acceso de miembros no es parte de una tarea, entonces la consideramos segura.
- De lo contrario, si el lado derecho es una canalización o una variable, también lo consideramos seguro.
Por ejemplo, los siguientes casos de uso se consideran seguros y se pueden guardar en el historial.
$a.Secret = Get-Secret -Name github-token -Vault MySecret
$a.Secret = $secret
$a.Password.Secret | Set-Value
$token = (Get-AzAccessToken -ResourceUrl 'https://app.contoso.com').Token
El lanzamiento también mejoró la limpieza del historial confidencial para permitir la recuperación del token usando las herramientas de línea de comandos az, gcloud y kubectl.
Por ejemplo, los siguientes casos de uso se consideran seguros y se pueden guardar en el historial.
kubectl get secrets
kubectl get secret db-user-pass -o jsonpath='{.data.password}' | base64 --decode
kubectl describe secret db-user-pass
az account get-access-token --resource=https://app.contoso.com --query accessToken --output tsv
$env:PGPASS = gcloud auth print-access-token
Historial de lanzamientos de PSReadLine
Ha habido muchas actualizaciones de PSReadLine desde la versión que se incluye en Windows PowerShell 5.1.
- La versión actual es PSReadLine 2.3.4
- PowerShell 7.4 se entrega con PSReadLine 2.3.4
- PowerShell 7.3 viene con PSReadLine 2.2.6
- PowerShell 7.2 viene con PSReadLine 2.1.0
- PowerShell 7.0.11 incluido con PSReadLine 2.0.4
- PowerShell 5.1 se entrega con PSReadLine 2.0.0
Para obtener una lista completa de cambios, consulte el registro de cambios de PSReadLine.
- PSReadLine 2.3.4
Además de varias correcciones de errores, esta versión incluye las siguientes mejoras:
ListView desplazable para IntelliSense predictivo
- Ajusta automáticamente el tamaño según el tamaño de la ventana del terminal
- Puede contener hasta 50 resultados de predicción.
- Encabezado de lista dinámica que muestra la cantidad de resultados y la fuente de predicción actual
Se mejoró la limpieza del historial confidencial para permitir la recuperación de tokens de az, gcloud y kubectl.
Mejorar la depuración predeterminada del historial confidencial para permitir el acceso seguro a la propiedad
Se agregó soporte para palabras con mayúsculas, minúsculas y mayúsculas.
Hacer que la finalización de tabulación muestre resultados cuyos ListItemText sean diferentes solo por caso
Admite el comando de objeto de texto <d,i,w> en el modo de edición VI
Cambiar el color predeterminado para la predicción en línea para atenuarlo
Agregue una muestra a README para transformar el punto de código Unicode en un carácter Unicode mediante Alt+x
Agregue la opción TerminateOrphanedConsoleApps en Windows para eliminar procesos huérfanos conectados a la consola que pueden alterar la lectura de la entrada de la consola.
PSReadLine 2.2.6
En esta versión, la función Predictive IntelliSense está habilitada de forma predeterminada según las siguientes condiciones:
- Si se admite Virtual Terminal (VT) y PSReadLine se ejecuta en PowerShell 7.2 o superior, PredictionSource se establece en
HistoryAndPlugin
HistoryNingunoPSReadLine 2.2.5
Versión de servicio oficial con correcciones de errores menores.
PSReadLine 2.2.2
PSReadLine agregó dos nuevas funciones predictivas de IntelliSense:
- Se agregó el parámetro PredictionViewStyle para permitir la selección del nuevo
ListView.
- Se agregó el parámetro PredictionViewStyle para permitir la selección del nuevo
CommandPrediction introducidas en PowerShell 7.2 para permitir que un usuario pueda importar un módulo predictor que pueda representar las sugerencias desde una fuente personalizada.Microsoft.PowerShell.Pager para obtener ayuda dinámicaPSReadLine 2.1.0
Esta versión incluye las siguientes mejoras agregadas desde la versión 2.0.4:
- Agregue sugerencias predictivas de IntelliSense desde el historial de comandos
PSReadLine 2.0.4
Esta versión incluye las siguientes mejoras agregadas desde la versión 2.0.0:
- Se agregó el parámetro
-ChordaGet-PSReadLineKeyHandlerpara permitir la búsqueda de combinaciones de teclas específicas.
Comentarios y contribuciones a PSReadLine
PSReadLine en GitHub
No dude en enviar una solicitud de extracción o enviar comentarios en la página de GitHub.
Ver también
- PSReadLine está fuertemente influenciado por la biblioteca GNU readline.