Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Descripción breve
PSReadLine proporciona una experiencia de edición de línea de comandos mejorada en la consola de PowerShell.
Descripción larga
PowerShell 7.3 se incluye con PSReadLine 2.2.6. La versión actual es PSReadLine 2.3.4. La versión actual de PSReadLine se puede instalar y usar en Windows PowerShell 5.1 y versiones posteriores. Para algunas características, debe ejecutar PowerShell 7.2 o posterior.
PSReadLine proporciona una eficaz experiencia de edición de línea de comandos para la consola de PowerShell. Proporciona:
- Coloración de sintaxis de la línea de comandos
- Indicación visual de errores de sintaxis
- Una mejor experiencia de varias líneas (tanto edición como historial)
- Enlaces de claves personalizables
- Modos cmd y Emacs
- Muchas opciones de configuración
- Finalización del estilo de Bash (opcional en modo Cmd, valor predeterminado en modo Emacs)
- Emacs yanke/anillo de la muerte
- Movimiento y eliminación de tokens de PowerShell basados en "palabras"
- IntelliSense predictivo
- Visualización dinámica de la Ayuda en la consola sin perder su lugar en la línea de comandos
PSReadLine requiere PowerShell 5.1 o posterior. PSReadLine funciona con el host de consola de Windows predeterminado, Terminal Windows y Visual Studio Code. No funciona en Windows PowerShell ISE.
PSReadLine se puede instalar desde la Galería de 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 de 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. Si es necesario, puede cargar manualmente el módulo.
IntelliSense predictivo
IntelliSense predictivo es una adición al concepto de finalización de tabulación que ayuda al usuario a completar correctamente los comandos. Permite a los usuarios detectar, editar y ejecutar comandos completos basados en predicciones coincidentes del historial del usuario y complementos específicos de dominio adicionales.
Habilitación de IntelliSense predictivo
El IntelliSense predictivo está deshabilitado por defecto. Para habilitar las predicciones, solo tiene que ejecutar el siguiente comando:
Set-PSReadLineOption -PredictionSource History
El parámetro PredictionSource también puede aceptar complementos para requisitos específicos y personalizados de dominio.
Para deshabilitar IntelliSense predictivo, solo tiene que ejecutar lo siguiente:
Set-PSReadLineOption -PredictionSource None
Nota:
IntelliSense predictivo 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.
Enlaces de clave personalizados
PSReadLine admite enlaces de claves personalizados mediante el cmdlet Set-PSReadLineKeyHandler. La mayoría de los enlaces de clave personalizados llaman a una de las funciones enlazables de , por ejemplo,
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
Puede enlazar un ScriptBlock a una clave. ScriptBlock puede hacer prácticamente todo lo que quiera. Algunos ejemplos útiles son:
- editar la línea de comandos
- abrir una nueva ventana (por ejemplo, ayuda)
- cambiar directorios sin cambiar la línea de comandos
ScriptBlock recibe dos argumentos:
$key: un objeto [ConsoleKeyInfo] que es la clave que desencadenó el enlace personalizado. Si enlaza el mismo ScriptBlock a varias claves y necesita realizar diferentes acciones en función de la clave, puede comprobar$key. Muchos enlaces personalizados omiten este argumento.$arg: un argumento arbitrario. Normalmente, este sería un argumento entero que el usuario pasa de los enlaces de clave DigitArgument. Si el enlace no acepta argumentos, es razonable omitir este argumento.
Echemos un vistazo a un ejemplo que agrega una línea de comandos al historial sin ejecutarla. Esto es útil cuando se da cuenta de que olvidó hacer algo, pero no desea volver a escribir la línea de comandos que ya ha escrito.
$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
Puede ver muchos más ejemplos en el archivo SamplePSReadLineProfile.ps1, que se instala en la carpeta del módulo PSReadLine de.
La mayoría de los enlaces clave usan algunas funciones auxiliares para editar la línea de comandos. Esas API se documentan en about_PSReadLine_Functions.
Notas
Historial de comandos
PSReadLine mantiene un archivo de historial que contiene todos los comandos y datos que ha escrito desde la línea de comandos. Los archivos de historial son un archivo denominado $($host.Name)_history.txt. En los sistemas Windows, el archivo de historial se almacena en $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine. En sistemas que no son windows, los archivos de historial se almacenan en $env:XDG_DATA_HOME/powershell/PSReadLine o $env:HOME/.local/share/powershell/PSReadLine.
El historial puede contener datos confidenciales, incluidas las contraseñas. PSReadLine intenta filtrar la información confidencial. Las líneas de comandos que contengan las siguientes cadenas no se escriben en el archivo de historial.
passwordasplaintexttokenapikeysecret
PSReadLine 2.2.0 mejora el filtrado de datos confidenciales
- Usa el árbol de sintaxis abstracta de PowerShell (AST) de la línea de comandos analizada para buscar datos confidenciales.
- Usa 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-SecretGet-SecretInfoGet-SecretVaultRegister-SecretVaultRemove-SecretSet-SecretInfoSet-SecretVaultDefaultTest-SecretVaultUnlock-SecretVaultUnregister-SecretVault
Por ejemplo, se permiten 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 obtener un ejemplo de cómo usar AddToHistoryHandler, vea ejemplo 7 de Set-PSReadLineOption.
PSReadLine 2.3.4 mejora el filtrado de datos confidenciales
Se ha mejorado la limpieza predeterminada del historial confidencial para permitir que el historial contenga acceso seguro a las propiedades.
Cuando la cadena confidencial forma parte de un acceso de propiedad:
- Si esta operación de acceso a miembros no forma parte de una asignación, consideramos que es 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
La versión también ha mejorado la limpieza del historial confidencial para permitir la recuperación del token mediante las herramientas de línea de comandos de az, gcloudy 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 versiones 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 incluye con PSReadLine 2.3.4
- PowerShell 7.3 se incluye con PSReadLine 2.2.6
- PowerShell 7.2 se incluye con PSReadLine 2.1.0
- PowerShell 7.0.11 incluido con PSReadLine 2.0.4
- PowerShell 5.1 se incluye con PSReadLine 2.0.0
Para obtener una lista completa de los 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
- Autoajusta el tamaño en función del tamaño de la ventana del terminal.
- Puede contener hasta 50 resultados de predicción.
- Encabezado de lista dinámica que muestra el número de resultados y el origen de predicción actual
Se ha mejorado la limpieza del historial confidencial para permitir la recuperación de tokens de
az,gcloudykubectlMejorar la limpieza del historial sensible predeterminado para permitir el acceso seguro a las propiedades
Se ha añadido la posibilidad de poner mayúsculas, minúsculas y mayúsculas iniciales a las palabras
Hacer que la finalización de tabulación muestre los resultados cuyos
ListItemTextson diferentes solo por mayúsculas o minúsculasAdmite el comando text-object
<d,i,w>en el modo de edición VICambia el color predeterminado para la predicción en línea a un color tenue
Agregue un ejemplo a README para transformar el punto de código Unicode en un carácter Unicode mediante
Alt+xAgregue la opción TerminateOrphanedConsoleApps en Windows para eliminar el proceso huérfano conectado a la consola que puede estropear la lectura de la entrada de la consola
PSReadLine 2.2.6
En esta versión, la característica IntelliSense predictiva está habilitada de forma predeterminada en función de las condiciones siguientes:
- Si se admite el terminal virtual (VT) y PSReadLine se ejecuta en PowerShell 7.2 o posterior, PredictionSource se establece en
HistoryAndPlugin - Si se admite VT y PSReadLine se ejecuta en PowerShell antes de la versión 7.2, PredictionSource se establece en
History - Si no se admite VT, PredictionSource se establece en
None
- Si se admite el terminal virtual (VT) y PSReadLine se ejecuta en PowerShell 7.2 o posterior, PredictionSource se establece en
PSReadLine 2.2.5
Versión de mantenimiento oficial con correcciones de errores menores.
PSReadLine 2.2.2
- PSReadLine ha agregado dos nuevas características predictivas de IntelliSense:
- Se agregó el parámetro PredictionViewStyle para permitir la selección del nuevo
ListView. - PSReadLine conectado a las APIs de
CommandPredictionintroducidas en PowerShell 7.2 para permitir a un usuario importar un módulo de predicción que muestre las sugerencias de un origen personalizado.
- Se agregó el parámetro PredictionViewStyle para permitir la selección del nuevo
- Se ha actualizado para usar la versión 1.0.0 de
Microsoft.PowerShell.Pagerpara obtener ayuda dinámica. - Se ha mejorado la limpieza de elementos de historial confidenciales.
- Muchas correcciones de errores y mejoras más pequeñas
- PSReadLine ha agregado dos nuevas características predictivas de IntelliSense:
PSReadLine 2.1.0
Esta versión acumula las siguientes mejoras agregadas desde la versión 2.0.4:
- Adición de sugerencias predictivas de IntelliSense desde el historial de comandos
- Muchas correcciones de errores y mejoras de API
PSReadLine 2.0.4
Esta versión incluye las siguientes mejoras agregadas desde la versión 2.0.0:
- Se agregó el parámetro a
-Chordpara permitir laGet-PSReadLineKeyHandlerbúsqueda de combinaciones de teclas específicas
- Se agregó el parámetro a
Comentarios & contribuir a PSReadLine
No dude en enviar una solicitud de incorporación de cambios o enviar comentarios en la página de GitHub.
Véase también
- PSReadLine está muy influenciado por la biblioteca de de línea de lectura gnu.