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, $PSStyley 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
  • 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 una System.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.

    • 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 al FromRgb() 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 Beigede 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
    • TableHeader : formato para encabezados de tabla
    • 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
  • $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 y Classic. 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 en Classic.

    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

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-Filey 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 contiene ESC o C1 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 el Ansi 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.

Consulte también