about_ANSI_Terminals
Descripción breve
Describe la compatibilidad disponible para secuencias de escape ANSI en PowerShell.
Descripción larga
PowerShell tiene muchas características que admiten el uso de secuencias de escape ANSI para controlar la representación de la salida en la aplicación de terminal que hospeda PowerShell.
PowerShell 7.2 agregó una nueva variable automática, $PSStyle
y cambios en el motor de PowerShell para admitir la salida del texto decorado con ANSI.
Compatibilidad con terminal ANSI
Las características ANSI están diseñadas para ser compatibles con los terminales basados en xterm. Para obtener más información, vea xterm en Wikipedia.
En Windows 10 y versiones posteriores, el host de consola de Windows es compatible con xterm. La aplicación Terminal Windows también es compatible con xterm.
En macOS, la aplicación de terminal predeterminada es compatible con xterm.
Para Linux, cada distribución se distribuye con una aplicación de terminal diferente. Consulte la documentación de la distribución para encontrar una aplicación de terminal adecuada.
$PSStyle
La variable tiene las siguientes propiedades:
- Restablecer : desactiva todas las decoraciones
- Parpadeo : activa parpadeo
- BlinkOff: desactiva Blink Off
- Negrita : activa negrita
- BoldOff : desactiva la negrita
- Dim : activa Dim (agregado en PowerShell 7.4)
- DimOff : desactiva la atenuación (agregada en PowerShell 7.4)
- Oculto : activa oculta
- HiddenOff : desactiva oculta
- Inverso : activa la inversa
- ReverseOff : desactiva la reversión
- Cursiva : activa cursiva
- Cursiva: desactiva cursiva
- Subrayado : activa la subrayado
- SubrayadoOff : desactiva la inserción
- Tachado : activa el tachado
- StrikethroughOff : desactiva el ataque
- OutputRendering : control cuando se usa la representación de salida
- Formato : objeto anidado que controla el formato predeterminado para flujos de salida
- Progress : objeto anidado que controla la representación de barras de progreso
- FileInfo : objeto anidado para controlar el color de los objetos FileInfo .
- Primer plano: objeto anidado para controlar el color de primer plano
- Fondo : objeto anidado para controlar el color de fondo
Los miembros base devuelven cadenas de secuencias de escape de ANSI asignadas a sus nombres. Los valores se pueden configurar para permitir la personalización. Por ejemplo, podría cambiar negrita a subrayado. Los nombres de propiedad facilitan la creación de cadenas decoradas mediante la finalización de tabulación:
"$($PSStyle.Background.BrightCyan)Power$($PSStyle.Underline)$($PSStyle.Bold)Shell$($PSStyle.Reset)"
Los miembros siguientes controlan cómo o cuando se usa el formato ANSI:
$PSStyle.OutputRendering
es unaSystem.Management.Automation.OutputRendering
enumeración con los valores:ANSI
: las secuencias de escape ANSI siempre se pasan a través tal como está.Importante
Debe usar el modo ANSI al redirigir la salida a un archivo o a la canalización diseñada para ejecutarse de bajada. Esto garantiza que la salida no se modifique. El uso de cualquier otro modo modifica la salida quitando secuencias de escape ANSI, lo que puede cambiar el comportamiento de ejecución.
PlainText
: las secuencias de escape ANSI siempre se quitan para que solo sea texto sin formato. En sesiones remotas, si el host remoto está establecidoPlainText
en , la salida se quita de secuencias de escape ANSI antes de devolverla al cliente local.Host
: este es el comportamiento predeterminado. Las secuencias de escape ANSI se quitan de la salida redirigida o canalizado. Para obtener más información, consulte Redireccionamiento de la salida.
Los
$PSStyle.Background
miembros y$PSStyle.Foreground
son cadenas que contienen las secuencias de escape ANSI para los 16 colores de la consola estándar.Black
BrightBlack
White
BrightWhite
Red
BrightRed
Magenta
BrightMagenta
Blue
BrightBlue
Cyan
BrightCyan
Green
BrightGreen
Yellow
BrightYellow
Los valores son configurables y pueden contener cualquier número de secuencias de escape ANSI. También hay un
FromRgb()
método para especificar el color de 24 bits. Hay dos maneras de llamar alFromRgb()
método .string FromRgb(byte red, byte green, byte blue) string FromRgb(int rgb)
Cualquiera de los ejemplos siguientes establece el color de fondo en el color
Beige
de 24 bits .$PSStyle.Background.FromRgb(245, 245, 220) $PSStyle.Background.FromRgb(0xf5f5dc)
$PSStyle.Formatting
es un objeto anidado para controlar el formato predeterminado de los encabezados de depuración, error, detallado, mensajes de advertencia y lista y tabla. También puede controlar atributos como negrita y subrayado. Reemplaza$Host.PrivateData
como la manera de administrar colores para dar formato a la representación.$Host.PrivateData
sigue existiendo para la compatibilidad con versiones anteriores, pero no está conectada a$PSStyle.Formatting
.$PSStyle.Formatting
tiene los siguientes miembros:- FormatAccent : formato para elementos de lista
- ErrorAccent : formato para metadatos de error
- Error : formato para mensajes de error
- Advertencia: formato para mensajes de advertencia
- Detallado: formato para mensajes detallados
- Depuración : formato para los mensajes de depuración
- TableHeader : formato para encabezados de tabla
- CustomTableHeaderLabel : formato para encabezados de tabla que no son realmente propiedades en el objeto
- FeedbackName : formato para el nombre del proveedor de comentarios (agregado como una característica experimental en PowerShell 7.4)
- FeedbackText : formato para los mensajes de comentarios (agregado como una característica experimental en PowerShell 7.4)
- FeedbackAction : formato para las acciones sugeridas del proveedor de comentarios (agregadas como una característica experimental en PowerShell 7.4)
$PSStyle.Progress
permite controlar la representación de la barra de vista de progreso.- Estilo: cadena ANSI que establece el estilo de representación.
- MaxWidth : establece el ancho máximo de la vista. Tiene como valor predeterminado
120
. El valor mínimo es 18. - Vista : una enumeración con valores
Minimal
yClassic
.Classic
es la representación existente sin cambios.Minimal
es una representación mínima de una sola línea.Minimal
es el valor predeterminado. - UseOSCIndicator : el valor predeterminado es
$false
. Establézcalo en$true
para los terminales que admiten indicadores de OSC.
Nota:
Si el host no admite Virtual Terminal,
$PSStyle.Progress.View
se establece automáticamente enClassic
.En el ejemplo siguiente se establece el estilo de representación en una barra de progreso mínima.
$PSStyle.Progress.View = 'Minimal'
$PSStyle.FileInfo
es un objeto anidado para controlar el color de los objetos FileInfo .- Directorio: miembro integrado para especificar el color de los directorios
- SymbolicLink : miembro integrado para especificar el color de los vínculos simbólicos
- Ejecutable : miembro integrado para especificar el color de los ejecutables.
- Extensión : use este miembro para definir colores para diferentes extensiones de archivo. El miembro Extension incluye previamente extensiones para archivar y para archivos de PowerShell.
Cmdlets que generan salida ANSI
- Los cmdlets de Markdown: el cmdlet Show-Markdown muestra el contenido de un archivo que contiene texto markdown. La salida se representa mediante secuencias ANSI para representar estilos diferentes. Puede administrar las definiciones de los estilos mediante los cmdlets Get-MarkdownOption y Set-MarkdownOption .
- Cmdlets de PSReadLine: el módulo PSReadLine usa secuencias ANSI para colorear los elementos de sintaxis de PowerShell en la línea de comandos. Los colores se pueden administrar mediante Get-PSReadLineOption y Set-PSReadLineOption.
Get-Error
: el cmdlet Get-Error devuelve una vista detallada de un objeto Error, con formato para facilitar la lectura.Select-String
- A partir de PowerShell 7.0, Select-String usa secuencias ANSI para resaltar los patrones coincidentes en la salida.Write-Progress
- La salida ANSI se administra mediante$PSStyle.Progress
, como se ha descrito anteriormente. Para obtener más información, vea Write-Progress
Redireccionamiento de la salida en Host
modo
De forma predeterminada, $PSStyle.OutputRendering
es un valor establecido en Host. Las secuencias de escape ANSI se quitan de la salida redirigida o canalizado.
OutputRendering solo se aplica a la representación en el host, Out-File
y Out-String
. La salida de los ejecutables nativos no se ve afectada.
PowerShell 7.2.6 cambió el comportamiento de Out-File
y Out-String
para los escenarios siguientes:
- Cuando el objeto de entrada es una cadena pura, estos cmdlets mantienen la cadena sin cambios independientemente de la configuración OutputRendering .
- Cuando el objeto de entrada debe tener aplicada una vista de formato, estos cmdlets mantienen o quitan secuencias de escape de las cadenas de salida de formato en función de la configuración OutputRendering .
Este es un cambio importante en estos cmdlets en comparación con PowerShell 7.2.
OutputRendering no se aplica a la salida del proceso de host de PowerShell, por ejemplo, cuando se ejecuta pwsh
desde una línea de comandos y se redirige la salida.
En el ejemplo siguiente, PowerShell se ejecuta en Linux desde bash
. El Get-ChildItem
cmdlet genera texto decorado con ANSI. Dado que el redireccionamiento se produce en el bash
proceso, fuera del host de PowerShell, la salida no se ve afectada por OutputRendering.
pwsh -noprofile -command 'Get-Childitem' > out.txt
Al inspeccionar el contenido de verá las secuencias de out.txt
escape ANSI.
Por el contrario, cuando se produce el redireccionamiento dentro de la sesión de PowerShell, OutputRendering afecta a la salida redirigida.
pwsh -noprofile -command 'Get-Childitem > out.txt'
Al inspeccionar el contenido de no hay secuencias de out.txt
escape ANSI.
Deshabilitación de la salida ANSI
La compatibilidad con secuencias de escape ANSI se puede desactivar mediante las variables de entorno TERM y NO_COLOR.
Los siguientes valores de $env:TERM
modifican el comportamiento de la manera siguiente:
dumb
-Establece$Host.UI.SupportsVirtualTerminal = $false
xterm-mono
-Establece$PSStyle.OutputRendering = PlainText
xtermm
-Establece$PSStyle.OutputRendering = PlainText
Si $env:NO_COLOR
existe, se establece en $PSStyle.OutputRendering
PlainText. Para obtener más información sobre la variable de entorno NO_COLOR , vea https://no-color.org/.
Uso $PSStyle
de desde C#
Los desarrolladores de C# pueden acceder PSStyle
como singleton, como se muestra en el ejemplo siguiente:
string output = $"{PSStyle.Instance.Foreground.Red}{PSStyle.Instance.Bold}Hello{PSStyle.Instance.Reset}";
PSStyle
existe en el espacio de nombres System.Management.Automation.
El motor de PowerShell incluye los siguientes cambios:
- El sistema de aplicación de formato de PowerShell se actualiza para respetar
$PSStyle.OutputRendering
. - El
StringDecorated
tipo se agrega para controlar las cadenas de escape ANSI. - La
string IsDecorated
propiedad booleana se agregó para devolver true cuando la cadena contieneESC
oC1 CSI
secuencias de caracteres. - La
Length
propiedad de una cadena devuelve la longitud del texto sin las secuencias de escape ANSI. - El
StringDecorated Substring(int contentLength)
método devuelve una subcadena a partir del índice 0 hasta la longitud del contenido que no forma parte de las secuencias de escape ANSI. Esto es necesario para la aplicación de formato en las tablas a fin de truncar cadenas y conservar las secuencias de escape de ANSI que no ocupan espacio de caracteres imprimibles. - El
string ToString()
método permanece igual y devuelve la versión de texto no cifrado de la cadena. - El
string ToString(bool Ansi)
método devuelve la cadena insertada ANSI sin formato si elAnsi
parámetro es true. De lo contrario, se devuelve una versión de texto no cifrado sin secuencias de escape de ANSI. - El
FormatHyperlink(string text, uri link)
método devuelve una cadena que contiene secuencias de escape ANSI usadas para decorar hipervínculos. Algunos hosts de terminal, como el Terminal Windows, admiten este marcado, que permite que se pueda hacer clic en el texto representado en el terminal.
Métodos estáticos de la clase PSStyle
PowerShell 7.4 agrega tres nuevos métodos estáticos a la [System.Management.Automation.PSStyle]
clase .
[System.Management.Automation.PSStyle] | Get-Member -Static -MemberType Method
TypeName: System.Management.Automation.PSStyle
Name MemberType Definition
---- ---------- ----------
Equals Method static bool Equals(System.Object objA, System.Object objB)
MapBackgroundColorToEscapeSequence Method static string MapBackgroundColorToEscapeSequence(System.ConsoleColor bac…
MapColorPairToEscapeSequence Method static string MapColorPairToEscapeSequence(System.ConsoleColor foregroun…
MapForegroundColorToEscapeSequence Method static string MapForegroundColorToEscapeSequence(System.ConsoleColor for…
ReferenceEquals Method static bool ReferenceEquals(System.Object objA, System.Object objB)
Estos métodos proporcionan una manera de convertir valores ConsoleColor en secuencias de escape ANSI para los colores de primer plano y de fondo o para una combinación de ambos.
En los ejemplos siguientes se muestran las secuencias de escape ANSI generadas por estos métodos.
using namespace System.Management.Automation
[PSStyle]::MapBackgroundColorToEscapeSequence('Black') | Format-Hex
Label: String (System.String) <3A04954D>
Offset Bytes Ascii
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
------ ----------------------------------------------- -----
0000000000000000 1B 5B 34 30 6D �[40m
[PSStyle]::MapForegroundColorToEscapeSequence('Red') | Format-Hex
Label: String (System.String) <38B50F41>
Offset Bytes Ascii
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
------ ----------------------------------------------- -----
0000000000000000 1B 5B 39 31 6D �[91m
[PSStyle]::MapColorPairToEscapeSequence('Red','Black') | Format-Hex
Label: String (System.String) <365A5875>
Offset Bytes Ascii
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
------ ----------------------------------------------- -----
0000000000000000 1B 5B 39 31 3B 34 30 6D �[91;40m