about_ANSI_Terminals

Kurze Beschreibung

Beschreibt die Unterstützung für ANSI-Escapesequenzen in PowerShell.

Lange Beschreibung

PowerShell verfügt über viele Features, die die Verwendung von ANSI-Escapesequenzen unterstützen, um das Rendern der Ausgabe in der Terminalanwendung zu steuern, die PowerShell hostet.

PowerShell 7.2 hat eine neue automatische Variable und Änderungen am PowerShell-Modul hinzugefügt, $PSStyleum die Ausgabe von ANSI-ergänztem Text zu unterstützen.

ANSI-Terminalunterstützung

Die ANSI-Features sind so konzipiert, dass sie mit den xterm-basierten Terminals kompatibel sind. Weitere Informationen finden Sie unter xterm in Wikipedia.

Unter Windows 10 und höher ist der Windows-Konsolenhost xterm kompatibel. Die Windows-Terminal-Anwendung ist ebenfalls xterm kompatibel.

Unter macOS ist die Standardmäßige Terminalanwendung xterm-kompatibel.

Für Linux wird jede Verteilung mit einer anderen Terminalanwendung ausgeliefert. Lesen Sie die Dokumentation für Ihre Verteilung, um eine geeignete Terminalanwendung zu finden.

$PSStyle

Die Variable weist die folgenden Eigenschaften auf:

  • Zurücksetzen - Deaktiviert alle Dekorationen
  • Blinken – Aktiviert Blinken
  • BlinkOff – Deaktiviert Blinken
  • Fett – Aktiviert Fett
  • BoldOff – Deaktiviert Fett
  • Dim – Aktiviert "Dim " (in PowerShell 7.4 hinzugefügt)
  • DimOff – Deaktiviert "Dim" (in PowerShell 7.4 hinzugefügt)
  • Ausgeblendet – Aktiviert ausgeblendet
  • HiddenOff – Deaktiviert ausgeblendet
  • Umkehren – Aktiviert umgekehrt
  • ReverseOff – Deaktiviert Reverse
  • Kursiv - Aktiviert Kursiv
  • ItalicOff - Deaktiviert Kursiv
  • Unterstreichung – Schaltet unterstreicht ein
  • UnderlineOff – Schaltet unterstreicht aus
  • Durchgestrichen – Durchstreicht durchgestrichen
  • StrikethroughOff – Schaltet durchgestrichen aus
  • OutputRendering – Steuerung beim Verwenden des Ausgaberenderings
  • Formatierung – Geschachteltes Objekt, das die Standardformatierung für Ausgabedatenströme steuert
  • Fortschritt – Geschachteltes Objekt, das das Rendern von Statusanzeigen steuert
  • FileInfo – Geschachteltes Objekt zum Steuern der Farbe von FileInfo-Objekten.
  • Foreground - Geschachteltes Objekt zum Steuern der Vordergrundfarbe
  • Hintergrund – Geschachteltes Objekt zum Steuern der Hintergrundfarbe

Die Basismember geben Zeichenfolgen von ANSI-Escapesequenzen zurück, die ihren Namen zugeordnet sind. Die Werte können beliebig angepasst werden. Sie können z. B. fett in unterstrichen ändern. Die Eigenschaftennamen erleichtern ihnen das Erstellen von verzierten Zeichenfolgen mithilfe des Tabstoppabschlusses:

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

Die folgenden Member steuern, wie oder wann ANSI-Formatierung verwendet wird:

  • $PSStyle.OutputRendering ist eine System.Management.Automation.OutputRendering Enumeration mit den Werten:

    • ANSI: ANSI-Escapesequenzen werden immer wie gewohnt durchlaufen.

      Wichtig

      Sie sollten den ANSI-Modus verwenden, wenn Sie die Ausgabe an eine Datei oder die Pipeline umleiten, die nachgelagert ausgeführt werden soll. Dadurch wird sichergestellt, dass die Ausgabe nicht geändert wird. Durch Die Verwendung eines anderen Modus wird die Ausgabe durch Entfernen von ANSI-Escapesequenzen geändert, wodurch sich das Ausführungsverhalten ändern kann.

    • PlainText: ANSI-Escapesequenzen werden immer entfernt, sodass sie nur Nur-Text ist. Wenn der Remotehost auf PlainText"Festgelegt" festgelegt ist, wird die Ausgabe in Remotesitzungen von ANSI-Escapesequenzen entfernt, bevor sie an den lokalen Client gesendet werden.

    • Host: Dies ist das Standardverhalten. Die ANSI-Escapesequenzen werden aus einer umgeleiteten oder weitergeleiteten Ausgabe entfernt. Weitere Informationen finden Sie unter Umleitungsausgabe.

  • Die $PSStyle.Background Elemente sind $PSStyle.Foreground Zeichenfolgen, die die ANSI-Escapesequenzen für die 16 Standardkonsolenfarben enthalten.

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

    Die Werte sind festgelegt und können eine beliebige Anzahl von ANSI-Escapesequenzen enthalten. Es gibt auch eine FromRgb() Methode zum Angeben der 24-Bit-Farbe. Es gibt zwei Möglichkeiten, die FromRgb() Methode aufzurufen.

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

    Eines der folgenden Beispiele legt die Hintergrundfarbe auf die 24-Bit-Farbe Beigefest.

    $PSStyle.Background.FromRgb(245, 245, 220)
    $PSStyle.Background.FromRgb(0xf5f5dc)
    
  • $PSStyle.Formatting ist ein geschachteltes Objekt, um die Standardformatierung von Debug-, Fehler-, Ausführlichen, Warnmeldungen und Listen- und Tabellenüberschriften zu steuern. Sie können auch Attribute wie Fettdruck und Unterstreichung steuern. Er ersetzt $Host.PrivateData die Möglichkeit zum Verwalten von Farben für das Formatrendering. $Host.PrivateData weiterhin aus Gründen der Abwärtskompatibilität vorhanden, aber nicht mit $PSStyle.Formatting. $PSStyle.Formatting hat die folgenden Mitglieder:

    • FormatAccent – Formatierung für Listenelemente
    • ErrorAccent – Formatierung für Fehlermetadaten
    • Fehler – Formatierung für Fehlermeldungen
    • Warnung – Formatierung für Warnmeldungen
    • Ausführlich – Formatierung für ausführliche Nachrichten
    • Debuggen – Formatierung für Debugnachrichten
    • TableHeader – Formatierung für Tabellenüberschriften
    • CustomTableHeaderLabel – Formatierung für Tabellenüberschriften, die berechnete Werte sind
    • FeedbackName – Formatierung für den Namen des Feedbackanbieters (als experimentelles Feature in PowerShell 7.4 hinzugefügt)
    • FeedbackText – Formatierung für Feedbacknachrichten (als experimentelles Feature in PowerShell 7.4 hinzugefügt)
    • FeedbackAction – Formatierung für vorgeschlagene Aktionen des Feedbackanbieters (als experimentelles Feature in PowerShell 7.4 hinzugefügt)
  • $PSStyle.Progress ermöglicht ihnen das Steuern des Renderns der Statusansichtsleiste.

    • Style - Eine ANSI-Zeichenfolge, die den Renderingstil festlegt.
    • MaxWidth – Legt die maximale Breite der Ansicht fest. Wird standardmäßig auf 120 festgelegt. Der Mindestwert ist 18.
    • Ansicht – Eine Enumeration mit Werten Minimal und Classic. Classic ist das vorhandene Rendering ohne Änderungen. Minimal ist ein einzeiliges minimales Rendering. Minimal ist die Standardoption.
    • UseOSCIndicator – Standardwert für $false. Legen Sie dies für Terminals fest $true , die OSC-Indikatoren unterstützen.

    Hinweis

    Wenn Host das virtuelle Terminal nicht unterstützt, wird $PSStyle.Progress.View automatisch auf Classic festgelegt.

    Im folgenden Beispiel wird die Renderingformatvorlage auf eine minimale Statusanzeige festgelegt.

    $PSStyle.Progress.View = 'Minimal'
    
  • $PSStyle.FileInfo ist ein geschachteltes Objekt zum Steuern der Farbe von FileInfo-Objekten .

    • Verzeichnis – Integriertes Mitglied zum Angeben der Farbe für Verzeichnisse
    • SymbolicLink – Integriertes Element zum Angeben der Farbe für symbolische Verknüpfungen
    • Ausführbare Datei – Integriertes Mitglied zum Angeben der Farbe für ausführbare Dateien.
    • Erweiterung – Verwenden Sie dieses Element, um Farben für verschiedene Dateierweiterungen zu definieren. Das Extension-Member enthält bereits Erweiterungen für Archiv- und PowerShell-Dateien.

Cmdlets, die EINE ANSI-Ausgabe generieren

Umleitung der Ausgabe im Host Modus

Standardmäßig $PSStyle.OutputRendering ist "Host" festgelegt. Die ANSI-Escapesequenzen werden aus einer umgeleiteten oder weitergeleiteten Ausgabe entfernt.

OutputRendering gilt nur für das Rendern im Host, Out-Fileund Out-String. Die Ausgabe von systemeigenen ausführbaren Dateien ist nicht betroffen.

PowerShell 7.2.6 hat das Verhalten von Out-File und Out-String für die folgenden Szenarien geändert:

  • Wenn das Eingabeobjekt reine Zeichenfolge ist, behalten diese Cmdlets die Zeichenfolge unabhängig von der Einstellung OutputRendering unverändert.
  • Wenn auf das Eingabeobjekt eine Formatierungsansicht angewendet werden muss, behalten oder entfernen diese Cmdlets Escapesequenzen aus den Formatierungsausgabezeichenfolgen basierend auf der OutputRendering-Einstellung .

Dies ist eine bahnbrechende Änderung dieser Cmdlets im Vergleich zu PowerShell 7.2.

OutputRendering gilt nicht für die Ausgabe aus dem PowerShell-Hostprozess, z. B. wenn Sie über eine Befehlszeile ausführen pwsh und die Ausgabe umleiten.

Im folgenden Beispiel wird PowerShell unter Linux von bash. Das Get-ChildItem Cmdlet erzeugt ANSI-verzierten Text. Da die bash Umleitung im Prozess erfolgt, außerhalb des PowerShell-Hosts, ist die Ausgabe von OutputRendering nicht betroffen.

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

Wenn Sie den Inhalt der out.txt ANSI-Escapesequenzen überprüfen, sehen Sie die ESCAPE-Sequenzen.

Wenn die Umleitung in der PowerShell-Sitzung erfolgt, wirkt sich OutputRendering dagegen auf die umgeleitete Ausgabe aus.

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

Wenn Sie den Inhalt der out.txt ANSI-Escapesequenzen prüfen, sind keine ESCAPE-Sequenzen vorhanden.

Deaktivieren der ANSI-Ausgabe

Die Unterstützung für ANSI-Escapesequenzen kann mithilfe der Umgebungsvariablen TERM oder NO_COLOR deaktiviert werden.

Die folgenden Werte von $env:TERM ändern so das Verhalten:

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

Wenn $env:NO_COLOR vorhanden, $PSStyle.OutputRendering wird sie auf "PlainText" festgelegt. Weitere Informationen zur NO_COLOR Umgebungsvariablen finden Sie unter https://no-color.org/.

Verwenden $PSStyle von C#

C#-Entwickler können auf einen Singleton zugreifen PSStyle , wie im folgenden Beispiel gezeigt:

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

PSStyle ist im Namespace „System.Management.Automation“ enthalten.

Das PowerShell-Modul enthält die folgenden Änderungen:

  • Das PowerShell-Formatierungssystem wird aktualisiert, um $PSStyle.OutputRendering zu berücksichtigen.
  • Der StringDecorated Typ wird hinzugefügt, um ANSI-Escapezeichenfolgen zu behandeln.
  • Die string IsDecorated boolesche Eigenschaft wurde hinzugefügt, um true zurückzugeben, wenn die Zeichenfolge sequenziert oder C1 CSI enthältESC.
  • Die Length Eigenschaft einer Zeichenfolge gibt die Länge für den Text ohne die ANSI-Escapesequenzen zurück.
  • Die StringDecorated Substring(int contentLength) Methode gibt eine Teilzeichenfolge ab Index 0 bis zur Inhaltslänge zurück, die nicht Teil von ANSI-Escapesequenzen ist. Dies ist notwendig, damit Zeichenfolgen durch Tabellenformatierungen abgeschnitten und ANSI-Escapesequenzen beibehalten werden können, die keinen druckbaren Zeichenbereich belegen.
  • Die string ToString() Methode bleibt gleich und gibt die Nur-Text-Version der Zeichenfolge zurück.
  • Die string ToString(bool Ansi) Methode gibt die unformatierte eingebettete ANSI-Zeichenfolge zurück, wenn der Ansi Parameter true ist. Andernfalls wird eine Klartextversion zurückgegeben, aus der die ANSI-Escapesequenzen entfernt wurden.
  • Die FormatHyperlink(string text, uri link) Methode gibt eine Zeichenfolge zurück, die ANSI-Escapesequenzen enthält, die zum Dekorieren von Links verwendet werden. Einige Terminalhosts wie der Windows-Terminal unterstützen dieses Markup, wodurch der gerenderte Text im Terminal klickbar wird.

Statische Methoden der PSStyle-Klasse

PowerShell 7.4 fügt der [System.Management.Automation.PSStyle] Klasse drei neue statische Methoden hinzu.

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

Diese Methoden bieten eine Möglichkeit zum Konvertieren von ConsoleColor-Werten in ANSI-Escapesequenzen für Vordergrund- und Hintergrundfarben oder für eine Kombination aus beiden.

Die folgenden Beispiele zeigen die von diesen Methoden erzeugten ANSI-Escapesequenzen.

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

Weitere Informationen