Dela via


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 på Wikipedia.

På Windows 10 och senare är Windows-konsolvärden xtermkompatibel. Det Windows-terminal programmet är också xtermkompatibelt.

I macOS är standardterminalprogrammet xtermkompatibelt.

För Linux levereras varje distribution med ett annat terminalprogram. Se dokumentationen för din distribution för att hitta ett lämpligt terminalprogram.

$PSStyle

Variabeln har följande egenskaper:

  • Återställ – Inaktiverar alla dekorationer
  • Blinka - aktiverar blinkning
  • BlinkOff - inaktiverar blinkning
  • Fet - aktiverar fetstil
  • BoldOff – inaktiverar fetstil
  • Dold - aktiverar dold
  • HiddenOff - stänger av dold
  • Omvänd - aktiverar omvänt
  • ReverseOff – inaktiverar omvänt
  • Kursiv stil – Aktiverar kursiv stil
  • Kursiv av - Inaktiverar kursiv stil
  • Understrykning – aktiverar understrykning
  • UnderlineOff – inaktiverar understrykning
  • Genomstrykning - Slår igenom på
  • StrikethroughOff - Svängar slå igenom av
  • OutputRendering – Kontroll när utdatarendering används
  • Formatering – kapslat objekt som styr standardformateringen för utdataströmmar
  • Förlopp – Kapslat objekt som styr återgivningen av förloppsindikatorer
  • 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 tabbifyllning:

"$($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 en System.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 pipeline 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.

    • Host: Detta är standardbeteendet. ANSI-escape-sekvenserna tas bort från omdirigerade eller pipade utdata. Mer information finns i Omdirigera utdata.

  • $PSStyle.Background Medlemmarna 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 anropa FromRgb() metoden.

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

    I något av följande exempel anges 24-bitarsfärgen i bakgrundsfä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
    • TableHeader – formatering för tabellrubriker
    • ErrorAccent – formatering för felmetadata
    • Fel – formatering för felmeddelanden
    • Varning – formatering för varningsmeddelanden
    • Utförlig – formatering för utförliga meddelanden
    • Felsöka – formatering för felsökningsmeddelanden
  • $PSStyle.Progress gör att du kan styra återgivningen av förloppsvyfältet.

    • Style – 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 och MinimalClassic. 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.

    Anteckning

    Om värden inte stöder virtuell terminal $PSStyle.Progress.View ställs automatiskt in på Classic.

    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
    • Symbolisk länk – inbyggd medlem för att ange färg för symboliska länkar
    • Körbar fil – 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 renderas med 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 Hjälp av 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 (Skrivförlopp)

Omdirigera utdata i Host läge

Som standard $PSStyle.OutputRendering är värdet Värd. ANSI-escape-sekvenserna tas bort från omdirigerade eller pipade utdata.

OutputRendering gäller endast för rendering i värden, Out-Fileoch Out-String. Utdata från interna 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 hå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 .

Det här ä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 påverkas inte utdata utanför PowerShell-värden 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 ändrar 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 finns $PSStyle.OutputRendering anges 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 undantagna ANSI-strängar.
  • Den string IsDecorated booleska egenskapen lades till för att returnera true när strängen innehåller ESC eller C1 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 innehållslängden som inte ingår i ANSI-escape-sekvenser. 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 inbäddade strängen raw ANSI om parametern Ansi ä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-terminal, stöder den här markeringen, vilket gör den renderade texten klickbar i terminalen.

Se även