about_ANSI_Terminals

Korte beschrijving

Beschrijft de ondersteuning die beschikbaar is voor ANSI-escapereeksen in PowerShell.

Lange beschrijving

PowerShell heeft veel functies die ondersteuning bieden voor het gebruik van ANSI-escapereeksen om de weergave van uitvoer in de terminaltoepassing te beheren die als host fungeert voor PowerShell.

PowerShell 7.2 heeft een nieuwe automatische variabele $PSStyletoegevoegd en wijzigingen in de PowerShell-engine ter ondersteuning van de uitvoer van ansi-ingerichte tekst.

ANSI Terminal-ondersteuning

De ANSI-functies zijn ontworpen om compatibel te zijn met de xterm-terminals. Zie xterm in Wikipedia voor meer informatie.

In Windows 10 en hoger is de Windows Console Host xterm compatibel. De Windows Terminal-toepassing is ook xterm-compatibel.

In macOS is de standaardterminaltoepassing xterm compatibel.

Voor Linux wordt elke distributie geleverd met een andere terminaltoepassing. Raadpleeg de documentatie voor uw distributie om een geschikte terminaltoepassing te vinden.

$PSStyle

De variabele heeft de volgende eigenschappen:

  • Opnieuw instellen - Alle decoraties uitschakelen
  • Blink - Schakelt Blink in
  • BlinkOff - Blink uitschakelen
  • Vet - Hiermee schakelt u Vet in
  • BoldOff - Hiermee schakelt u Vet uit
  • Dim - Dim inschakelen (toegevoegd in PowerShell 7.4)
  • DimOff - Dim uitschakelen (toegevoegd in PowerShell 7.4)
  • Verborgen - Hiermee schakelt u Verborgen in
  • HiddenOff - Verborgen uitschakelen
  • Omgekeerd - Hiermee schakelt u Omgekeerd in
  • ReverseOff - Hiermee schakelt u Omgekeerd uit
  • Cursief- Hiermee schakelt u Cursief in
  • Cursief- Cursief uitschakelen
  • Onderstrepen - Hiermee schakelt u onderstreping in
  • Onderstreping- Hiermee schakelt u onderstreping uit
  • Doorhalen - Doorhalen wordt ingeschakeld
  • StrikethroughOff - Doorhalen uitschakelen
  • OutputRendering - Bepalen wanneer uitvoerweergave wordt gebruikt
  • Opmaak - Genest object waarmee standaardopmaak voor uitvoerstromen wordt beheerd
  • Voortgang - Genest object waarmee de weergave van voortgangsbalken wordt bestuurd
  • FileInfo - Genest object om de kleuring van FileInfo-objecten te bepalen.
  • Voorgrond - Genest object om voorgrondkleuring te bepalen
  • Achtergrond - Genest object om achtergrondkleuring te beheren

De basisleden retourneren tekenreeksen van ANSI-escapereeksen die zijn toegewezen aan hun namen. De waarden zijn ingesteld om aanpassingen toe te staan. U kunt bijvoorbeeld vetgedrukt wijzigen in onderstreept. Met de eigenschapsnamen kunt u eenvoudiger versierde tekenreeksen maken met behulp van tabvoltooiing:

"$($PSStyle.Background.BrightCyan)Power$($PSStyle.Underline)$($PSStyle.Bold)Shell$($PSStyle.Reset)"

De volgende leden bepalen hoe of wanneer ANSI-opmaak wordt gebruikt:

  • $PSStyle.OutputRendering is een System.Management.Automation.OutputRendering opsomming met de waarden:

    • ANSI: ANSI-escapereeksen worden altijd doorgegeven als is.

      Belangrijk

      U moet de ANSI-modus gebruiken bij het omleiden van uitvoer naar een bestand of de pijplijn die is bedoeld om downstream uit te voeren. Dit zorgt ervoor dat de uitvoer niet wordt gewijzigd. Als u een andere modus gebruikt, wordt de uitvoer gewijzigd door ANSI-escapereeksen te verwijderen, waardoor het uitvoeringsgedrag kan worden gewijzigd.

    • PlainText: ANSI-escapereeksen worden altijd verwijderd, zodat het alleen tekst zonder opmaak is. Als de externe host is ingesteld PlainTextin externe sessies, wordt de uitvoer verwijderd van ANSI-escapereeksen voordat deze naar de lokale client wordt verzonden.

    • Host: Dit is het standaardgedrag. De ANSI-escapereeksen worden verwijderd uit omgeleide of doorgesluisde uitvoer. Zie De uitvoer omleiden voor meer informatie.

  • De $PSStyle.Background en $PSStyle.Foreground leden zijn tekenreeksen die de ANSI-escapereeksen voor de 16 standaardconsolekleuren bevatten.

    • Black
    • BrightBlack
    • White
    • BrightWhite
    • Red
    • BrightRed
    • Magenta
    • BrightMagenta
    • Blue
    • BrightBlue
    • Cyan
    • BrightCyan
    • Green
    • BrightGreen
    • Yellow
    • BrightYellow

    De waarden zijn ingesteld en kunnen een willekeurig aantal ANSI-escapereeksen bevatten. Er is ook een FromRgb() methode om een 24-bits kleur op te geven. Er zijn twee manieren om de FromRgb() methode aan te roepen.

    string FromRgb(byte red, byte green, byte blue)
    string FromRgb(int rgb)
    

    Een van de volgende voorbeelden stelt de achtergrondkleur in op de 24-bits kleur Beige.

    $PSStyle.Background.FromRgb(245, 245, 220)
    $PSStyle.Background.FromRgb(0xf5f5dc)
    
  • $PSStyle.Formatting is een genest object voor het beheren van standaardopmaak van foutopsporing, fout, uitgebreide, waarschuwingsberichten en lijst- en tabelkoppen. U kunt ook kenmerken beheren, zoals vetgedrukt en onderstreept. Het vervangt $Host.PrivateData als de manier om kleuren te beheren voor het weergeven van opmaak. $Host.PrivateData blijft bestaan voor compatibiliteit met eerdere versies, maar is niet verbonden met $PSStyle.Formatting. $PSStyle.Formatting heeft de volgende leden:

    • FormatAccent - opmaak voor lijstitems
    • ErrorAccent - opmaak voor foutmetagegevens
    • Fout : opmaak voor foutberichten
    • Waarschuwing : opmaak voor waarschuwingsberichten
    • Uitgebreid - opmaak voor uitgebreide berichten
    • Fouten opsporen - opmaak voor foutopsporingsberichten
    • TableHeader - opmaak voor tabelkoppen
    • CustomTableHeaderLabel - opmaak voor tabelkoppen die berekende waarden zijn
    • FeedbackName : opmaak voor de naam van de feedbackprovider (toegevoegd als experimentele functie in PowerShell 7.4)
    • FeedbackText : opmaak voor feedbackberichten (toegevoegd als experimentele functie in PowerShell 7.4)
    • FeedbackAction : opmaak voor voorgestelde acties van de feedbackprovider (toegevoegd als experimentele functie in PowerShell 7.4)
  • $PSStyle.Progress hiermee kunt u weergavebalkweergave van voortgang beheren.

    • Stijl : een ANSI-tekenreeks die de weergavestijl instelt.
    • MaxWidth - Hiermee stelt u de maximale breedte van de weergave in. Standaard ingesteld op 120. De minimumwaarde is 18.
    • Weergeven - Een opsomming met waarden en MinimalClassic. Classic is de bestaande rendering zonder wijzigingen. Minimal is een minimale rendering van één regel. Minimal is de standaardwaarde.
    • UseOSCIndicator - Defaults to $false. Stel dit in voor $true terminals die OSC-indicatoren ondersteunen.

    Notitie

    Als de host geen ondersteuning biedt voor Virtual Terminal, $PSStyle.Progress.View wordt deze automatisch ingesteld op Classic.

    In het volgende voorbeeld wordt de weergavestijl ingesteld op een minimale voortgangsbalk.

    $PSStyle.Progress.View = 'Minimal'
    
  • $PSStyle.FileInfo is een genest object om de kleuring van FileInfo-objecten te bepalen.

    • Map - Ingebouwd lid om kleur op te geven voor directory's
    • SymbolicLink : ingebouwd lid om kleur op te geven voor symbolische koppelingen
    • Uitvoerbaar bestand : ingebouwd lid om kleur op te geven voor uitvoerbare bestanden.
    • Extensie : gebruik dit lid om kleuren te definiëren voor verschillende bestandsextensies. Het extensielid bevat vooraf extensies voor archief- en PowerShell-bestanden.

Cmdlets waarmee ANSI-uitvoer wordt gegenereerd

  • De Markdown-cmdlets: de show-Markdown-cmdlet geeft de inhoud weer van een bestand met markdown-tekst. De uitvoer wordt weergegeven met behulp van ANSI-reeksen om verschillende stijlen weer te geven. U kunt de definities van de stijlen beheren met behulp van de cmdlets Get-MarkdownOption en Set-MarkdownOption .
  • PSReadLine-cmdlets: de PSReadLine-module maakt gebruik van ANSI-reeksen om PowerShell-syntaxiselementen op de opdrachtregel te kleuren. De kleuren kunnen worden beheerd met Get-PSReadLineOption en Set-PSReadLineOption.
  • Get-Error - de cmdlet Get-Error retourneert een gedetailleerde weergave van een Error-object , opgemaakt om het gemakkelijker te lezen.
  • Select-String - Vanaf PowerShell 7.0 gebruikt Select-String ANSI-reeksen om de overeenkomende patronen in de uitvoer te markeren.
  • Write-Progress - ANSI-uitvoer wordt beheerd met behulp van $PSStyle.Progress, zoals hierboven beschreven. Zie Schrijfvoortgang voor meer informatie

Uitvoer omleiden in Host de modus

Is standaard $PSStyle.OutputRendering ingesteld op Host. De ANSI-escapereeksen worden verwijderd uit omgeleide of doorgesluisde uitvoer.

OutputRendering is alleen van toepassing op rendering in de host, Out-Fileen Out-String. Uitvoer van systeemeigen uitvoerbare bestanden wordt niet beïnvloed.

PowerShell 7.2.6 heeft het gedrag van Out-File en Out-String voor de volgende scenario's gewijzigd:

  • Wanneer het invoerobject pure tekenreeks is, blijven deze cmdlets de tekenreeks ongewijzigd, ongeacht de instelling OutputRendering .
  • Wanneer op het invoerobject een opmaakweergave moet worden toegepast, behouden of verwijderen deze cmdlets escapereeksen uit de opmaakuitvoertekenreeksen op basis van de instelling OutputRendering .

Dit is een belangrijke wijziging in deze cmdlets in vergelijking met PowerShell 7.2.

OutputRendering is niet van toepassing op uitvoer van het PowerShell-hostproces, bijvoorbeeld wanneer u pwsh uitvoert vanaf een opdrachtregel en de uitvoer omleidt.

In het volgende voorbeeld wordt PowerShell uitgevoerd op Linux vanuit bash. De Get-ChildItem cmdlet produceert ANSI-ingerichte tekst. Omdat omleiding plaatsvindt in het bash proces, buiten de PowerShell-host, wordt de uitvoer niet beïnvloed door OutputRendering.

pwsh -noprofile -command 'Get-Childitem' > out.txt

Wanneer u de inhoud van out.txt de ANSI-escapereeksen inspecteert.

Wanneer omleiding plaatsvindt in de PowerShell-sessie, heeft OutputRendering daarentegen invloed op de omgeleide uitvoer.

pwsh -noprofile -command 'Get-Childitem > out.txt'

Wanneer u de inhoud van out.txt de inhoud inspecteert, zijn er geen ANSI-escapereeksen.

ANSI-uitvoer uitschakelen

Ondersteuning voor ANSI-escapereeksen kan worden uitgeschakeld met behulp van de TERM of NO_COLOR omgevingsvariabelen.

De volgende waarden voor het wijzigen van $env:TERM het gedrag zijn als volgt:

  • dumb -Ingesteld $Host.UI.SupportsVirtualTerminal = $false
  • xterm-mono -Ingesteld $PSStyle.OutputRendering = PlainText
  • xtermm -Ingesteld $PSStyle.OutputRendering = PlainText

Als $env:NO_COLOR deze bestaat, $PSStyle.OutputRendering wordt deze ingesteld op PlainText. Zie voor meer informatie over de omgevingsvariabele https://no-color.org/NO_COLOR.

Gebruiken $PSStyle vanuit C#

C#-ontwikkelaars hebben toegang als PSStyle een singleton, zoals wordt weergegeven in het volgende voorbeeld:

string output = $"{PSStyle.Instance.Foreground.Red}{PSStyle.Instance.Bold}Hello{PSStyle.Instance.Reset}";

PSStyle bestaat in de naamruimte System.Management.Automation.

De PowerShell-engine bevat de volgende wijzigingen:

  • Het PowerShell-opmaaksysteem wordt bijgewerkt om te respecteren $PSStyle.OutputRendering.
  • Het StringDecorated type wordt toegevoegd om ANSI-tekenreeksen met escape-tekenreeksen te verwerken.
  • De string IsDecorated booleaanse eigenschap is toegevoegd om true te retourneren wanneer de tekenreeksen bevat ESC of C1 CSI tekenreeksen bevat.
  • De Length eigenschap van een tekenreeks retourneert de lengte voor de tekst zonder de ANSI-escapereeksen.
  • De StringDecorated Substring(int contentLength) methode retourneert een subtekenreeks die begint bij index 0 tot de inhoudslengte die geen deel uitmaakt van ANSI-escapereeksen. Dit is nodig voor tabelopmaak om tekenreeksen af tekappen en ANSI-escapereeksen te behouden die geen afdrukbare tekenruimte in beslag nemen.
  • De string ToString() methode blijft hetzelfde en retourneert de tekst zonder opmaak van de tekenreeks.
  • De string ToString(bool Ansi) methode retourneert de onbewerkte ANSI-ingesloten tekenreeks als de Ansi parameter waar is. Anders wordt een niet-opgemaakte versie met ANSI-escapereeksen geretourneerd.
  • De FormatHyperlink(string text, uri link) methode retourneert een tekenreeks met ANSI-escapereeksen die worden gebruikt om hyperlinks te versieren. Sommige terminalhosts, zoals de Windows Terminal, ondersteunen deze markeringen, waardoor de weergegeven tekst in de terminal kan worden geklikt.

Statische methoden van de PSStyle-klasse

PowerShell 7.4 voegt drie nieuwe statische methoden toe aan de [System.Management.Automation.PSStyle] klasse.

[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)

Deze methoden bieden een manier om ConsoleColor-waarden te converteren naar ANSI-escapereeksen voor voorgrond- en achtergrondkleuren of voor een combinatie van beide.

In de volgende voorbeelden ziet u de ANSI-escapereeksen die door deze methoden worden geproduceerd.

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

Zie ook