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, $PSStyle
um 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 eineSystem.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, dieFromRgb()
-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
Beige
festgelegt.$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
undClassic
.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 aufClassic
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.Progress
verwaltet, 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 bash
ausgefü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.OutputRendering
PlainText 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 oderC1 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 derAnsi
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.