Share via


about_ANSI_Terminals

Kurze Beschreibung

Beschreibt die Unterstützung, die für ANSI-Escapesequenzen in PowerShell verfügbar ist.

Lange Beschreibung

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

PowerShell 7.2 hat eine neue automatische Variable ( ) und Änderungen an der PowerShell-Engine hinzugefügt, $PSStyleum die Ausgabe von anSI-dekoriertem 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.

Ab Windows 10 ist der Windows-Konsolenhost xterm-kompatibel. Die Windows-Terminal-Anwendung ist auch xterm-kompatibel.

Unter macOS ist die Standardterminalanwendung xterm-kompatibel.

Für Linux wird jede Distribution mit einer anderen Terminalanwendung ausgeliefert. In der Dokumentation für Ihre Distribution finden Sie eine geeignete Terminalanwendung.

$PSStyle

Die Variable verfügt über die folgenden Eigenschaften:

  • Zurücksetzen : Deaktiviert alle Dekorationen
  • Blinken – Blinken aktiviert
  • BlinkOff : Blinken deaktiviert
  • Fett – Aktiviert Fett
  • BoldOff : Deaktiviert Fett
  • Ausgeblendet : Wird ausgeblendet aktiviert
  • HiddenOff : Deaktiviert ausgeblendet
  • Umgekehrt : Aktiviert umgekehrt
  • ReverseOff : Deaktiviert reverse
  • Kursiv - Kursiv aktiviert
  • ItalicOff – Deaktiviert Kursiv
  • Unterstrichen : Unterstreichung aktiviert
  • UnderlineOff : Deaktiviert die Unterstreichung
  • Durchgestrichen : Durchschlagen auf
  • StrikethroughOff : Deaktiviert den Durchschlag
  • OutputRendering : Steuern, wann das Ausgaberendering verwendet wird
  • Formatierung : Geschachteltes Objekt, das die Standardformatierung für Ausgabedatenströme steuert
  • Fortschritt : Geschachteltes Objekt, das das Rendern von Statusanzeigen steuert
  • FileInfo : Geschachteltes Objekt, um die Farbgebung von FileInfo-Objekten zu steuern.
  • Vordergrund : 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 beispielsweise fett in unterstrichen ändern. Die Eigenschaftennamen erleichtern Ihnen das Erstellen von dekorierten Zeichenfolgen mithilfe der Tabulatorenvollständigung:

"$($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 unverändert übergeben.

      Wichtig

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

    • PlainText: ANSI-Escapesequenzen werden immer entfernt, sodass es sich nur um Nur-Text handelt.

    • Host : Dies ist das Standardverhalten. Die ANSI-Escapesequenzen werden aus der Umleitungs- oder Pipeausgabe entfernt. Weitere Informationen finden Sie unter Umleitungsausgabe.

  • Die $PSStyle.Background Member und $PSStyle.Foreground sind 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 einstellbar und können eine beliebige Anzahl von ANSI-Escapesequenzen enthalten. Es gibt auch eine Methode zum Angeben der FromRgb() 24-Bit-Farbe. Es gibt zwei Möglichkeiten, die FromRgb() -Methode aufzurufen.

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

    In einem der folgenden Beispiele wird die Hintergrundfarbe der 24-Bit-Farbe Beigefestgelegt.

    $PSStyle.Background.FromRgb(245, 245, 220)
    $PSStyle.Background.FromRgb(0xf5f5dc)
    
  • $PSStyle.Formatting ist ein geschachteltes Objekt zum Steuern der Standardformatierung von Debug-, Fehler-, Ausführlichkeits-, Warnmeldungen sowie Listen- und Tabellenheadern. Sie können auch Attribute wie Fettdruck und Unterstreichung steuern. Sie ersetzt, um Farben für das Formatierungsrendering $Host.PrivateData zu verwalten. $Host.PrivateData Ist aus Gründen der Abwärtskompatibilität weiterhin vorhanden, ist aber nicht mit verbunden $PSStyle.Formatting. $PSStyle.Formatting verfügt über die folgenden Elemente:

    • FormatAccent : Formatierung für Listenelemente
    • TableHeader : Formatierung für Tabellenheader
    • 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
  • $PSStyle.Progress ermöglicht die Steuerung des Renderings der Statusansichtsleiste.

    • Formatvorlage : Eine ANSI-Zeichenfolge, die das Renderingformat festlegt.
    • MaxWidth : Legt die maximale Breite der Ansicht fest. Der Standardwert lautet 120. 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 Standardeinstellung.
    • UseOSCIndicator : Standardwert ist $false. Legen Sie dies für Terminals, die OSC-Indikatoren unterstützen, auf $true fest.

    Hinweis

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

    Im folgenden Beispiel wird der Renderingstil auf eine minimale Fortschrittsleiste festgelegt.

    $PSStyle.Progress.View = 'Minimal'
    
  • $PSStyle.FileInfo ist ein geschachteltes Objekt, um die Farbgebung von FileInfo-Objekten zu steuern.

    • Verzeichnis : Integriertes Element zum Angeben der Farbe für Verzeichnisse
    • SymbolicLink : Integriertes Element zum Angeben der Farbe für symbolische Links
    • Ausführbare Datei : Integriertes Element 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 ANSI-Ausgabe generieren

  • Die Markdown-Cmdlets: Das Cmdlet Show-Markdown zeigt den Inhalt einer Datei an, die Markdowntext enthält. Die Ausgabe wird mithilfe von ANSI-Sequenzen gerendert, um verschiedene Stile darzustellen. Sie können die Definitionen der Stile mithilfe der Cmdlets Get-MarkdownOption und Set-MarkdownOption verwalten.
  • PSReadLine-Cmdlets: Das PSReadLine-Modul verwendet ANSI-Sequenzen, um PowerShell-Syntaxelemente in der Befehlszeile zu kolorieren. Die Farben können mit Get-PSReadLineOption und Set-PSReadLineOption verwaltet werden.
  • Get-Error – Das Cmdlet Get-Error gibt eine detaillierte Ansicht eines Error-Objekts zurück, das formatiert ist, um das Lesen zu erleichtern.
  • Select-String - Ab PowerShell 7.0 verwendet Select-String ANSI-Sequenzen , um die übereinstimmenden Muster in der Ausgabe hervorzuheben.
  • Write-Progress – Die ANSI-Ausgabe wird mit $PSStyle.Progressverwaltet, wie oben beschrieben. Weitere Informationen finden Sie unter Schreibfortschritt.

Umleitung der Ausgabe im Host Modus

Standardmäßig $PSStyle.OutputRendering ist auf Host festgelegt. Die ANSI-Escapesequenzen werden aus der Umleitungs- oder Pipeausgabe entfernt.

OutputRendering gilt nur für das Rendern im Host, Out-File, und Out-String. Die Ausgabe nativer ausführbarer 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 eine reine Zeichenfolge ist, bleiben die Zeichenfolgen mit diesen Cmdlets unabhängig von der OutputRendering-Einstellung unverändert.
  • Wenn für das Eingabeobjekt eine Formatierungsansicht angewendet werden muss, behalten oder entfernen diese Cmdlets Escapesequenzen aus den Formatierungsausgabezeichenfolgen basierend auf der Einstellung OutputRendering .

Dies ist eine grundlegende Änderung in diesen 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 bashausgeführt. Das Get-ChildItem Cmdlet erzeugt ANSI-formatierten Text. Da die Umleitung außerhalb des bash PowerShell-Hosts im Prozess erfolgt, wird die Ausgabe nicht von OutputRendering beeinflusst.

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

Wenn Sie den Inhalt von out.txt überprüfen, werden die ANSI-Escapesequenzen angezeigt.

Im Gegensatz dazu wirkt sich OutputRendering auf die umgeleitete Ausgabe aus, wenn die Umleitung innerhalb der PowerShell-Sitzung erfolgt.

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

Wenn Sie den Inhalt von out.txt überprüfen, gibt es keine ANSI-Escapesequenzen.

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, wird auf $PSStyle.OutputRenderingPlainText festgelegt. Weitere Informationen zur NO_COLOR Umgebungsvariablen finden Sie unter https://no-color.org/.

Verwenden $PSStyle von C#

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

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 verarbeiten.
  • Die string IsDecorated boolesche Eigenschaft wurde hinzugefügt, um true zurückzugeben, wenn die Zeichenfolge Zeichenfolgen oder C1 CSI Zeichenfolgen 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 unverändert und gibt die Klartextversion 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 mit ANSI-Escapesequenzen zurück, die zum Dekorieren von Hyperlinks verwendet werden. Einige Terminalhosts wie der Windows-Terminal unterstützen dieses Markup, wodurch der gerenderte Text im Terminal klickbar wird.

Weitere Informationen