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, $PSStyle
um 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 eineSystem.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 aufPlainText
"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, dieFromRgb()
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
Beige
fest.$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 tatsächlich keine Eigenschaften für das Objekt 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
undClassic
.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 aufClassic
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
- Die Markdown-Cmdlets – das Cmdlet Show-Markdown zeigt den Inhalt einer Datei an, die Markdown-Text enthält. Die Ausgabe wird mithilfe von ANSI-Sequenzen gerendert, um unterschiedliche Formatvorlagen darzustellen. Sie können die Definitionen der Formatvorlagen mithilfe der Cmdlets "Get-MarkdownOption" und "Set-MarkdownOption" verwalten.
- PSReadLine-Cmdlets – das PSReadLine-Modul verwendet ANSI-Sequenzen zum Colorisieren von PowerShell-Syntaxelementen in der Befehlszeile. Die Farben können mithilfe von 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 wie oben beschrieben verwaltet$PSStyle.Progress
. Weitere Informationen finden Sie unter Write-Progress
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-File
und 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
-garnituren$Host.UI.SupportsVirtualTerminal = $false
xterm-mono
-garnituren$PSStyle.OutputRendering = PlainText
xtermm
-garnituren$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 oderC1 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 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 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