about_ANSI_Terminals
Kort beskrivning
Beskriver det stöd som är tillgängligt för ANSI-escape-sekvenser i PowerShell.
Lång beskrivning
PowerShell har många funktioner som stöder användning av ANSI-escape-sekvenser för att styra återgivningen av utdata i terminalprogrammet som är värd för PowerShell.
PowerShell 7.2 har lagt till en ny automatisk variabel, $PSStyle
, och ändringar i PowerShell-motorn för att stödja utdata från ANSI-dekorerad text.
Stöd för ANSI-terminal
ANSI-funktionerna är utformade för att vara kompatibla med xtermbaserade terminaler. Mer information finns i xterm i Wikipedia.
På Windows 10 och senare är Windows-konsolvärden xtermkompatibel. Windows Terminal-programmet är också xtermkompatibelt.
På macOS är standardterminalprogrammet xtermkompatibelt.
För Linux levereras varje distribution med ett annat terminalprogram. Läs dokumentationen för din distribution för att hitta ett lämpligt terminalprogram.
$PSStyle
Variabeln har följande egenskaper:
- Återställ – Stänger av alla dekorationer
- Blinka – aktiverar blinkning
- BlinkOff – inaktiverar blinkning
- Fetstil – Aktiverar fetstil
- BoldOff – Inaktiverar fetstil
- Dim – Aktiverar Dim (läggs till i PowerShell 7.4)
- DimOff – Inaktiverar dim (läggs till i PowerShell 7.4)
- Dold – Aktiverar dold
- HiddenOff – inaktiverar dolda
- Omvänd – Aktiverar omvänd
- ReverseOff – inaktiverar omvänt
- Kursiv – Aktiverar kursiv stil
- Kursiv av – inaktiverar kursiv stil
- Understrykning – Aktiverar understrykning
- UnderlineOff – inaktiverar understrykning
- Genomstrukning – Slår igenom
- StrikethroughOff - Svängar slå igenom av
- OutputRendering – Kontroll när utdatarendering används
- Formatering – kapslat objekt som styr standardformatering för utdataströmmar
- Förlopp – kapslat objekt som styr återgivningen av förloppsstaplar
- FileInfo – Kapslat objekt för att styra färgning av FileInfo-objekt .
- Förgrund – Kapslat objekt för att styra förgrundsfärgning
- Bakgrund – Kapslat objekt för att styra bakgrundsfärgning
Basmedlemmarna returnerar strängar av ANSI-escape-sekvenser som mappats till deras namn. Värdena kan anges för att tillåta anpassning. Du kan till exempel ändra fetstil till understruken. Egenskapsnamnen gör det enklare för dig att skapa dekorerade strängar med hjälp av tabbavslut:
"$($PSStyle.Background.BrightCyan)Power$($PSStyle.Underline)$($PSStyle.Bold)Shell$($PSStyle.Reset)"
Följande medlemmar styr hur eller när ANSI-formatering används:
$PSStyle.OutputRendering
är enSystem.Management.Automation.OutputRendering
uppräkning med värdena:ANSI
: ANSI-escape-sekvenser skickas alltid som de är.Viktigt!
Du bör använda ANSI-läge när du omdirigerar utdata till en fil eller pipelinen som är avsedd att köras nedströms. Detta säkerställer att utdata inte ändras. Om du använder något annat läge ändras utdata genom att ta bort ANSI-escape-sekvenser, vilket kan ändra körningsbeteendet.
PlainText
: ANSI-escape-sekvenser tas alltid bort så att det bara är oformaterad text. Om fjärrvärden är inställd påPlainText
i fjärrsessioner tas utdata från ANSI-escape-sekvenser innan den skickas tillbaka till den lokala klienten.Host
: Detta är standardbeteendet. ANSI-escape-sekvenserna tas bort från omdirigerade eller piped-utdata. Mer information finns i Omdirigera utdata.
Medlemmarna
$PSStyle.Background
och$PSStyle.Foreground
är strängar som innehåller ANSI-escape-sekvenserna för de 16 standardkonsolfärgerna.Black
BrightBlack
White
BrightWhite
Red
BrightRed
Magenta
BrightMagenta
Blue
BrightBlue
Cyan
BrightCyan
Green
BrightGreen
Yellow
BrightYellow
Värdena kan anges och kan innehålla valfritt antal ANSI-escape-sekvenser. Det finns också en
FromRgb()
metod för att ange 24-bitars färg. Det finns två sätt att anropaFromRgb()
metoden.string FromRgb(byte red, byte green, byte blue) string FromRgb(int rgb)
Något av följande exempel anger bakgrundsfärgen till 24-bitarsfärgen
Beige
.$PSStyle.Background.FromRgb(245, 245, 220) $PSStyle.Background.FromRgb(0xf5f5dc)
$PSStyle.Formatting
är ett kapslat objekt för att styra standardformateringen för felsökning, fel, utförliga, varningsmeddelanden och list- och tabellrubriker. Du kan också styra attribut som fetstil och understrykning. Den ersätter$Host.PrivateData
som ett sätt att hantera färger för formateringsrendering.$Host.PrivateData
fortsätter att finnas för bakåtkompatibilitet men är inte ansluten till$PSStyle.Formatting
.$PSStyle.Formatting
har följande medlemmar:- FormatAccent – formatering för listobjekt
- ErrorAccent – formatering för felmetadata
- Fel – formatering för felmeddelanden
- Varning – formatering för varningsmeddelanden
- Utförlig – formatering för utförliga meddelanden
- Felsökning – formatering för felsökningsmeddelanden
- TableHeader – formatering för tabellrubriker
- CustomTableHeaderLabel – formatering för tabellrubriker som faktiskt inte är egenskaper för objektet
- FeedbackName – formatering för feedbackproviderns namn (läggs till som en experimentell funktion i PowerShell 7.4)
- FeedbackText – formatering för feedbackmeddelanden (läggs till som en experimentell funktion i PowerShell 7.4)
- FeedbackAction – formatering för de föreslagna åtgärderna för feedbackprovidern (läggs till som en experimentell funktion i PowerShell 7.4)
$PSStyle.Progress
gör att du kan styra återgivning av förloppsvyfält.- Format – En ANSI-sträng som anger återgivningsformatet.
- MaxWidth – Anger vyns maximala bredd. Standardvärdet är
120
. Minimivärdet är 18. - Visa – en uppräkning med värden
Minimal
ochClassic
.Classic
är den befintliga renderingen utan ändringar.Minimal
är en minimal återgivning med en rad.Minimal
används som standard. - UseOSCIndicator – Standardvärdet är
$false
. Ange detta till$true
för terminaler som stöder OSC-indikatorer.
Kommentar
Om värden inte har stöd för virtuell terminal
$PSStyle.Progress.View
anges automatiskt tillClassic
.I följande exempel anges renderingsformatet till ett minimalt förloppsfält.
$PSStyle.Progress.View = 'Minimal'
$PSStyle.FileInfo
är ett kapslat objekt för att styra färgning av FileInfo-objekt .- Katalog – Inbyggd medlem för att ange färg för kataloger
- SymbolicLink – inbyggd medlem för att ange färg för symboliska länkar
- Körbar – inbyggd medlem för att ange färg för körbara filer.
- Tillägg – Använd den här medlemmen för att definiera färger för olika filnamnstillägg. Tilläggsmedlemmen innehåller tillägg för arkiv- och PowerShell-filer.
Cmdletar som genererar ANSI-utdata
- Markdown-cmdletarna – cmdleten Show-Markdown visar innehållet i en fil som innehåller markdown-text. Utdata återges med hjälp av ANSI-sekvenser för att representera olika format. Du kan hantera definitionerna av formatmallarna med hjälp av cmdletarna Get-MarkdownOption och Set-MarkdownOption .
- PSReadLine-cmdletar – PSReadLine-modulen använder ANSI-sekvenser för att färglägga PowerShell-syntaxelement på kommandoraden. Färgerna kan hanteras med Get-PSReadLineOption och Set-PSReadLineOption.
Get-Error
- Cmdleten Get-Error returnerar en detaljerad vy av ett felobjekt , formaterat för att göra det lättare att läsa.Select-String
– Från och med PowerShell 7.0 använder Select-String ANSI-sekvenser för att markera matchande mönster i utdata.Write-Progress
– ANSI-utdata hanteras med hjälp av$PSStyle.Progress
, enligt beskrivningen ovan. Mer information finns i Write-Progress
Omdirigera utdata i Host
läge
Som standard $PSStyle.OutputRendering
är värdet Värd. ANSI-escape-sekvenserna tas bort från omdirigerade eller piped-utdata.
OutputRendering gäller endast för rendering i värden, Out-File
och Out-String
. Utdata från inbyggda körbara filer påverkas inte.
PowerShell 7.2.6 ändrade beteendet Out-File
för och Out-String
för följande scenarier:
- När indataobjektet är en ren sträng behåller dessa cmdletar strängen oförändrad oavsett inställningen OutputRendering .
- När indataobjektet måste ha en formateringsvy tillämpad på den behåller eller tar dessa cmdletar bort escape-sekvenser från formateringsutdatasträngarna baserat på inställningen OutputRendering .
Detta är en icke-bakåtkompatibel ändring i dessa cmdletar jämfört med PowerShell 7.2.
OutputRendering gäller inte för utdata från PowerShell-värdprocessen, till exempel när du kör pwsh
från en kommandorad och omdirigerar utdata.
I följande exempel körs PowerShell på Linux från bash
. Cmdleten Get-ChildItem
producerar ANSI-dekorerad text. Eftersom omdirigering sker i bash
processen, utanför PowerShell-värden, påverkas inte utdata av OutputRendering.
pwsh -noprofile -command 'Get-Childitem' > out.txt
När du inspekterar innehållet i out.txt
ser du ANSI-escape-sekvenserna.
När omdirigering sker i PowerShell-sessionen påverkar OutputRendering däremot de omdirigerade utdata.
pwsh -noprofile -command 'Get-Childitem > out.txt'
När du inspekterar innehållet i out.txt
finns det inga ANSI-escape-sekvenser.
Inaktivera ANSI-utdata
Stöd för ANSI-escape-sekvenser kan inaktiveras med hjälp av term- eller NO_COLOR miljövariabler.
Följande värden för $env:TERM
att ändra beteendet enligt följande:
dumb
-Uppsättningar$Host.UI.SupportsVirtualTerminal = $false
xterm-mono
-Uppsättningar$PSStyle.OutputRendering = PlainText
xtermm
-Uppsättningar$PSStyle.OutputRendering = PlainText
Om $env:NO_COLOR
det finns anges det $PSStyle.OutputRendering
till PlainText. Mer information om miljövariabeln NO_COLOR finns i https://no-color.org/.
Använda $PSStyle
från C#
C#-utvecklare kan komma åt PSStyle
som en singleton, som du ser i följande exempel:
string output = $"{PSStyle.Instance.Foreground.Red}{PSStyle.Instance.Bold}Hello{PSStyle.Instance.Reset}";
PSStyle
finns i namnområdet System.Management.Automation.
PowerShell-motorn innehåller följande ändringar:
- PowerShell-formateringssystemet uppdateras för att respektera
$PSStyle.OutputRendering
. - Typen
StringDecorated
läggs till för att hantera ANSI-undantagna strängar. - Den
string IsDecorated
booleska egenskapen lades till för att returnera true när strängen innehållerESC
ellerC1 CSI
teckensekvenser. - Egenskapen
Length
för en sträng returnerar längden för texten utan ANSI-escape-sekvenserna. - Metoden
StringDecorated Substring(int contentLength)
returnerar en delsträng som börjar vid index 0 upp till den innehållslängd som inte ingår i ANSI-escapesekvenser. Detta krävs för att tabellformatering ska trunkera strängar och bevara ANSI-escape-sekvenser som inte tar upp utskrivbart teckenutrymme. - Metoden
string ToString()
förblir densamma och returnerar klartextversionen av strängen. - Metoden
string ToString(bool Ansi)
returnerar den råa ANSI-inbäddade strängen om parameternAnsi
är true. Annars returneras en klartextversion med ANSI-escape-sekvenser borttagna. - Metoden
FormatHyperlink(string text, uri link)
returnerar en sträng som innehåller ANSI-escape-sekvenser som används för att dekorera hyperlänkar. Vissa terminalvärdar, till exempel Windows-terminalen, stöder den här markeringen, vilket gör att den renderade texten kan klickas i terminalen.
Statiska metoder för PSStyle-klassen
PowerShell 7.4 lägger till tre nya statiska metoder i [System.Management.Automation.PSStyle]
klassen.
[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)
Med de här metoderna kan du konvertera ConsoleColor-värden till ANSI-escape-sekvenser för förgrunds- och bakgrundsfärger eller för en kombination av båda.
I följande exempel visas DE ANSI-escape-sekvenser som genereras av dessa metoder.
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