Megosztás a következőn keresztül:


about_ANSI_Terminals

Rövid leírás

Az ANSI-feloldási sorozatok PowerShellben elérhető támogatását ismerteti.

Hosszú leírás

A PowerShell számos olyan funkcióval rendelkezik, amelyek támogatják az ANSI-feloldó szekvenciák használatát a Kimenet renderelésének szabályozásához a PowerShellt futtató terminálalkalmazásban.

A PowerShell 7.2 új automatikus változót adott hozzá, $PSStyleés a PowerShell-motor módosításaival támogatja az ANSI által dekorált szöveg kimenetét.

ANSI-terminál támogatása

Az ANSI-funkciók úgy lettek kialakítva, hogy kompatibilisek legyenek az xterm-alapú terminálokkal. További információ: xterm a Wikipédiában.

Windows 10 és újabb rendszereken a Windows Konzol gazdagép xterm kompatibilis. A Windows Terminál alkalmazás xterm kompatibilis is.

MacOS rendszeren az alapértelmezett terminálalkalmazás xterm kompatibilis.

Linux esetén minden disztribúció más terminálalkalmazással rendelkezik. A megfelelő terminálalkalmazás megkereséséhez tekintse meg a disztribúció dokumentációját.

$PSStyle

A változó a következő tulajdonságokkal rendelkezik:

  • Visszaállítás – Az összes dekoráció kikapcsolása
  • Villogás – A Villogás bekapcsolva
  • BlinkOff – A Villogás kikapcsolása
  • Félkövér – Félkövér bekapcsolva
  • BoldOff – Félkövér kikapcsolása
  • Dim – Bekapcsolja a dim (a PowerShell 7.4-ben hozzáadva)
  • DimOff – A halványság kikapcsolása (a PowerShell 7.4-ben lett hozzáadva)
  • Rejtett – A Rejtett bekapcsolva
  • HiddenOff – Elrejtés kikapcsolása
  • Fordított – Bekapcsolja a fordított irányt
  • ReverseOff – Kikapcsolja a visszafordulást
  • Dőlt – Dőlt bekapcsolva
  • Dőlt betűs kikapcsolás – Dőlt betűs kikapcsolás
  • Aláhúzás – Aláhúzás bekapcsolva
  • UnderlineOff – Aláhúzás kikapcsolása
  • Áthúzás – Áthúzás bekapcsolva
  • StrikethroughOff – Az áthúzás kikapcsolása
  • OutputRendering – A kimeneti renderelés használatának szabályozása
  • Formázás – Beágyazott objektum, amely a kimeneti streamek alapértelmezett formázását szabályozza
  • Folyamat – Beágyazott objektum, amely vezérli a folyamatjelző sávok megjelenítését
  • FileInfo – Beágyazott objektum a FileInfo-objektumok színezésének szabályozásához.
  • Előtér – Beágyazott objektum az előtérszínezés szabályozásához
  • Háttér – Beágyazott objektum a háttérszínezés szabályozásához

Az alaptagok a nevükre leképezett ANSI-feloldósorozatok sztringeit adják vissza. Az értékek beállíthatók a testreszabás engedélyezéséhez. Például félkövérre válthat aláhúzásra. A tulajdonságnevek megkönnyítik a dekorált sztringek létrehozását a tabulátorkiegészítés használatával:

"$($PSStyle.Background.BrightCyan)Power$($PSStyle.Underline)$($PSStyle.Bold)Shell$($PSStyle.Reset)"

Az ANSI-formázás használatát a következő tagok szabályozzák:

  • $PSStyle.OutputRenderingSystem.Management.Automation.OutputRendering a következő értékekkel rendelkező enumerálás:

    • ANSI: Az ANSI-feloldósorozatok mindig az állapotuknak megfelelően haladnak át.

      Fontos

      ANSI-módot kell használnia, amikor a kimenetet egy fájlra vagy a folyamatra irányítja át, amelyet az alsóbb rétegben szeretne végrehajtani. Ez biztosítja, hogy a kimenet ne változik. Bármely más mód használata megváltoztatja a kimenetet az ANSI-feloldási sorozatok eltávolításával, ami megváltoztathatja a végrehajtási viselkedést.

    • PlainText: Az ANSI-feloldósorozatok mindig le vannak vetve, hogy csak egyszerű szöveg legyen. Távoli munkamenetek esetén, ha a távoli gazdagép be van állítva PlainText, a kimenet le lesz választva az ANSI-feloldási sorozatokról, mielőtt visszaküldené a helyi ügyfélnek.

    • Host: Ez az alapértelmezett viselkedés. A rendszer eltávolítja az ANSI-feloldási sorozatokat az átirányított vagy a vezetékes kimenetből. További információ: Átirányítás kimenete.

  • A $PSStyle.Background tagok olyan $PSStyle.Foreground sztringek, amelyek a 16 standard konzolszín ANSI-feloldási sorozatait tartalmazzák.

    • Black
    • BrightBlack
    • White
    • BrightWhite
    • Red
    • BrightRed
    • Magenta
    • BrightMagenta
    • Blue
    • BrightBlue
    • Cyan
    • BrightCyan
    • Green
    • BrightGreen
    • Yellow
    • BrightYellow

    Az értékek beállíthatók, és tetszőleges számú ANSI-feloldási sorozatot tartalmazhatnak. A 24 bites szín megadására is FromRgb() van mód. Kétféleképpen hívhatja meg a metódust FromRgb() .

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

    Az alábbi példák bármelyike a háttérszínt állítja be a 24 bites színre Beige.

    $PSStyle.Background.FromRgb(245, 245, 220)
    $PSStyle.Background.FromRgb(0xf5f5dc)
    
  • $PSStyle.Formatting beágyazott objektum, amely a hibakeresés, a hiba, a részletes, a figyelmeztető üzenetek, valamint a lista- és táblázatfejlécek alapértelmezett formázását szabályozza. Olyan attribútumokat is szabályozhat, mint a félkövér és aláhúzás. A formátummegjelenítési színek kezelésének módja a csere $Host.PrivateData . $Host.PrivateData továbbra is létezik a visszamenőleges kompatibilitás érdekében, de nincs csatlakoztatva a következőhöz $PSStyle.Formatting: . $PSStyle.Formatting a következő tagokat tartalmazza:

    • FormatAccent – listaelemek formázása
    • ErrorAccent – a hiba metaadatainak formázása
    • Hiba – a hibaüzenetek formázása
    • Figyelmeztetés – figyelmeztető üzenetek formázása
    • Részletes – részletes üzenetek formázása
    • Hibakeresés – a hibakeresési üzenetek formázása
    • TableHeader – táblázatfejlécek formázása
    • CustomTableHeaderLabel – olyan táblázatfejlécek formázása, amelyek valójában nem tulajdonságok az objektumon
    • FeedbackName – a visszajelzés-szolgáltató nevének formázása (kísérleti funkcióként hozzáadva a PowerShell 7.4-ben)
    • FeedbackText – visszajelzési üzenetek formázása (a PowerShell 7.4 kísérleti funkciójaként hozzáadva)
    • FeedbackAction – a visszajelzés-szolgáltató által javasolt műveletek formázása (kísérleti funkcióként hozzáadva a PowerShell 7.4-ben)
  • $PSStyle.Progress lehetővé teszi a folyamatjelző sáv renderelésének szabályozását.

    • Stílus – AnSI-sztring, amely a renderelési stílust állítja be.
    • MaxWidth – A nézet maximális szélességének beállítása. Alapértelmezett érték: 120. A minimális érték 18.
    • Nézet – Értékeket tartalmazó enumerálás és Minimal Classic. Classic a meglévő, módosítás nélküli renderelés. Minimal egy egysoros minimális renderelés. A Minimal az alapértelmezett formátum.
    • UseOSCIndicator – Alapértelmezés szerint a következő: $false. Állítsa be ezt az $true OSC-mutatókat támogató terminálokhoz.

    Feljegyzés

    Ha a gazdagép nem támogatja a virtuális terminált, $PSStyle.Progress.View a rendszer automatikusan a következőre állítja be a következőt Classic: .

    Az alábbi példa minimális folyamatjelző sávra állítja a megjelenítési stílust.

    $PSStyle.Progress.View = 'Minimal'
    
  • $PSStyle.FileInfobeágyazott objektum, amely a FileInfo-objektumok színezését szabályozza.

    • Címtár – Beépített tag a könyvtárak színének megadásához
    • SymbolicLink – Beépített tag a szimbolikus hivatkozások színének megadásához
    • Végrehajtható – A végrehajtható elemek színének megadására szolgáló beépített tag.
    • Bővítmény – A tag használatával különböző fájlkiterjesztések színeit határozhatja meg. A bővítménytag előre tartalmazza az archív és PowerShell-fájlok bővítményeit.

ANSI-kimenetet létrehozó parancsmagok

  • A Markdown-parancsmagok – a Show-Markdown parancsmag megjeleníti a Markdown-szöveget tartalmazó fájl tartalmát. A kimenet ANSI-szekvenciák használatával jelenik meg a különböző stílusok megjelenítéséhez. A stílusok definícióit a Get-MarkdownOption és a Set-MarkdownOption parancsmagokkal kezelheti.
  • PSReadLine-parancsmagok – a PSReadLine modul ANSI-szekvenciák használatával színezi a PowerShell-szintaxis elemeit a parancssorban. A színek a Get-PSReadLineOption és a Set-PSReadLineOption használatával kezelhetők.
  • Get-Error - a Get-Error parancsmag egy hibaobjektum részletes nézetét adja vissza, amely úgy van formázva, hogy könnyebben olvasható legyen.
  • Select-String - A PowerShell 7.0-tól kezdve a Select-String ANSI-sorozatokkal emeli ki a kimenetben lévő egyező mintákat.
  • Write-Progress - Az ANSI-kimenet kezelése a fent leírt módon $PSStyle.Progresstörténik. További információ: Írási folyamat

Kimenet Host átirányítása módban

Alapértelmezés szerint $PSStyle.OutputRendering gazdagépre van állítva. A rendszer eltávolítja az ANSI-feloldási sorozatokat az átirányított vagy a vezetékes kimenetből.

Az OutputRendering csak a gazdagépen Out-FileOut-Stringtörténő renderelésre és a . A natív végrehajtható fájlok kimenetét nem érinti.

A PowerShell 7.2.6 módosította a következő forgatókönyvek viselkedésétOut-File:Out-String

  • Ha a bemeneti objektum tiszta sztring, ezek a parancsmagok a OutputRendering beállítástól függetlenül változatlanul tartják a sztringet .
  • Amikor a bemeneti objektumra formázási nézetet kell alkalmazni, ezek a parancsmagok a Kimenetirendering beállítás alapján megőrzik vagy eltávolítják a kimeneti sztringek feloldósorozatait .

Ez a powershell 7.2-hez képest a parancsmagok kompatibilitástörő változása.

Az OutputRendering nem vonatkozik a PowerShell-gazdagép folyamatának kimenetére, például ha parancssorból futtatja pwsh és átirányítja a kimenetet.

Az alábbi példában a PowerShell Linuxon bashfut. A Get-ChildItem parancsmag ANSI-sel díszített szöveget hoz létre. Mivel az átirányítás a bash folyamat során történik, a PowerShell-gazdagépen kívül, a kimenetet nem befolyásolja az OutputRendering.

pwsh -noprofile -command 'Get-Childitem' > out.txt

Amikor megvizsgálja a tartalmát out.txt , megjelenik az ANSI-feloldási sorozat.

Ezzel szemben, ha az átirányítás a PowerShell-munkameneten belül történik, az OutputRendering hatással van az átirányított kimenetre.

pwsh -noprofile -command 'Get-Childitem > out.txt'

Ha megvizsgálja, out.txt hogy nincsenek-e ANSI-feloldási sorozatok.

ANSI-kimenet letiltása

Az ANSI-feloldási sorozatok támogatása a KIFEJEZÉS vagy NO_COLOR környezeti változók használatával kapcsolható ki.

A viselkedés módosításának $env:TERM következő értékei az alábbiak szerint változnak:

  • dumb -Készletek $Host.UI.SupportsVirtualTerminal = $false
  • xterm-mono -Készletek $PSStyle.OutputRendering = PlainText
  • xtermm -Készletek $PSStyle.OutputRendering = PlainText

Ha $env:NO_COLOR létezik, akkor $PSStyle.OutputRendering egyszerű szövegre van állítva. További információ a NO_COLOR környezeti változóról: https://no-color.org/.

Használat $PSStyle a C-ből#

A C#-fejlesztők egyetlentonként férhetnek hozzá PSStyle , ahogyan az alábbi példában is látható:

string output = $"{PSStyle.Instance.Foreground.Red}{PSStyle.Instance.Bold}Hello{PSStyle.Instance.Reset}";

PSStyle a System.Management.Automation névtérben található.

A PowerShell-motor a következő módosításokat tartalmazza:

  • A PowerShell formázási rendszere a tiszteletben tartása $PSStyle.OutputRenderingérdekében frissül.
  • A StringDecorated rendszer hozzáadja a típust az ANSI által kezelt sztringek kezeléséhez.
  • A string IsDecorated logikai tulajdonság értéke igaz lesz, ha a sztring tartalmaz ESC vagy C1 CSI karaktersorozatokat.
  • A Length sztring tulajdonsága az ANSI-feloldósorozatok nélküli szöveg hosszát adja vissza.
  • A StringDecorated Substring(int contentLength) metódus egy 0 indextől kezdődő részszúrást ad vissza az ANSI-feloldósorozatok részét nem képező tartalomhosszig. Erre azért van szükség, hogy a táblázatformázás sztringeket csonkítson, és megőrizze az OLYAN ANSI-feloldási sorozatokat, amelyek nem foglalnak el nyomtatható karakterterületet.
  • A string ToString() metódus változatlan marad, és visszaadja a sztring egyszerű szöveges verzióját.
  • A string ToString(bool Ansi) metódus a nyers ANSI beágyazott sztringet adja vissza, ha a Ansi paraméter igaz. Ellenkező esetben a rendszer egy egyszerű szöveges verziót ad vissza, amely eltávolítja az ANSI-feloldási sorozatokat.
  • A FormatHyperlink(string text, uri link) metódus egy olyan sztringet ad vissza, amely ANSI-feloldósorozatokat tartalmaz a hivatkozások díszítéséhez. Egyes terminál gazdagépek, például a Windows Terminál, támogatják ezt a korrektúrát, így a renderelt szöveg kattinthatóvá válik a terminálon.

A PSStyle osztály statikus metódusai

A PowerShell 7.4 három új statikus metódust ad hozzá az [System.Management.Automation.PSStyle] osztályhoz.

[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)

Ezek a metódusok lehetővé teszik a ConsoleColor-értékek ANSI-feloldósorozattá alakítását az előtér- és háttérszínek, illetve a kettő kombinációjához.

Az alábbi példák az ezen módszerek által előállított ANSI-feloldási sorozatokat mutatják be.

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

Lásd még