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 $PSStyle
toegevoegd 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 eenSystem.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 ingesteldPlainText
in 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 deFromRgb()
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 geen eigenschappen van het object 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
Minimal
Classic
.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 opClassic
.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-File
en 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 bevatESC
ofC1 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 deAnsi
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