Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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, $PSStyleés módosításokat adott hozzá a PowerShell-motorhoz, hogy támogassa 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 verziók esetén a Windows Konzol Host 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:
- alaphelyzetbe állítása – Az összes dekoráció kikapcsolása
- Villogás – Villogás bekapcsolása
- BlinkOff – A Villogás kikapcsolása
- Félkövér – Félkövér mód bekapcsolása
- BoldOff – Félkövér kikapcsolása
- Dim – Bekapcsolja a Dim (a PowerShell 7.4-ben hozzáadva)
- DimOff – A Dim kikapcsolása (a PowerShell 7.4-ben lett hozzáadva)
- Rejtett – Bekapcsolja a rejtettet
- HiddenOff – Elrejtés kikapcsolása
- Reverse – Bekapcsolja a hátramenetet
- ReverseOff – Kikapcsolja a fordított üzemmódot
- Dőlt – Dőlt bekapcsolva
- Dőlt betű kikapcsolása – Italics kikapcsolása
- Aláhúzás – Az aláhúzás bekapcsolása
- UnderlineOff – Az aláhúzás kikapcsolása
- Áthúzás – Áthúzás bekapcsolása
- StrikethroughOff – Az áthúzás kikapcsolása
- OutputRendering – A kimenet renderelésének szabályozása
- Formázás – Beágyazott objektum, amely a kimeneti streamek alapértelmezett formázását szabályozza
- Progress – Beágyazott objektum, amely vezérli a folyamatjelző sávok megjelenítését
- FileInfo – Beágyazott objektum FileInfo objektumok színezésének szabályozásához.
- Előtérbeli – 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 változtathat félkövérről 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.OutputRenderingegySystem.Management.Automation.OutputRenderingszám a következő értékekkel:ANSI: Az ANSI menekülési szekvenciák mindig átmennek as-is-en.Fontos
ANSI módot kell használnia, amikor a kimenetet átirányítja egy fájlba vagy a folyamatba, amelyet az alsóbb rétegben kíván 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 munkamenetekben, ha a távoli gazdagépPlainText-ra van beállítva, a kimenetet megtisztítják az ANSI vezérlőkarakterektől, mielőtt azt visszaküldenék a helyi ügyfélnek. Ez a mód eltávolítja a szövegformázást és a megjelenítési sorozatokat. Ez nem egy átfogó terminálvezérlési fertőtlenítő mechanizmus.Host: Ez az alapértelmezett viselkedés. A rendszer eltávolítja az ANSI-escape szekvenciákat az átirányított vagy csővezérelt kimenetről. További információkért lásd a Kimenet átirányítása.
A
$PSStyle.Backgroundés$PSStyle.Foregroundtagok olyan karakterláncok, amelyek a 16 standard konzolszín ANSI-vezérlési sorozatait tartalmazzák.BlackBrightBlackWhiteBrightWhiteRedBrightRedMagentaBrightMagentaBlueBrightBlueCyanBrightCyanGreenBrightGreenYellowBrightYellow
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 egy
FromRgb()metódus is létezik. Kétféleképpen hívhatja meg aFromRgb()metódust.string FromRgb(byte red, byte green, byte blue) string FromRgb(int rgb)Az alábbi példák bármelyike beállítja a háttérszínt a 24 bites színkód szerint: "
Beige".$PSStyle.Background.FromRgb(245, 245, 220) $PSStyle.Background.FromRgb(0xf5f5dc)$PSStyle.Formattingegy beágyazott objektum, amely a hibakereső, hibajelentő, részletes és 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$Host.PrivateDataváltja fel a színek kezelésének módját a formázási megjelenítésben.$Host.PrivateDatatovábbra is létezik a visszamenőleges kompatibilitás érdekében, de nincs csatlakoztatva$PSStyle.Formatting-hez.$PSStyle.Formattingtagjai a következők:- FormatAccent – listaelemek formázása
- ErrorAccent – a hiba metaadatainak formázása
- hiba – a hibaüzenetek formázása
- Figyelmeztető – a figyelmeztető üzenetek formázása
- Részletes – részletes üzenetek formázása
- Hibakeresési – 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 nem az objektumhoz tartozó tulajdonságok
- FeedbackName – a visszajelzésszolgáltató nevének formázása (a PowerShell 7.4 kísérleti funkciójaként hozzáadva)
- FeedbackText – visszajelzési üzenetek formázása (kísérleti funkcióként hozzáadva a PowerShell 7.4-ben)
- FeedbackAction – a visszajelzésszolgáltató által javasolt műveletek formázása (a PowerShell 7.4 kísérleti funkciójaként hozzáadva)
A
$PSStyle.Progresslehetővé teszi a folyamatjelző sáv megjelenítésének vezérlését.- Stílus – A renderelési stílust egy ANSI-sztring állítja be.
-
MaxWidth – A nézet maximális szélességének beállítása. Alapértelmezés szerint
120. A minimális érték 18. -
megtekintése – Értékeket,
MinimalésClassictartalmazó szám.Classica meglévő, módosítások nélküli renderelés.Minimalegyetlen sor minimális renderelése. Az alapértelmezettMinimal. -
UseOSCIndicator – Alapértelmezettként
$false. Állítsa ezt$trueértékre azoknál a termináloknál, amelyek támogatják az OSC mutatókat.
Jegyzet
Ha a gazdagép nem támogatja a Virtuális terminált,
$PSStyle.Progress.ViewautomatikusanClassic-re állítódik.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 FileInfo objektumok színezését szabályozza.Címtár – Beépített tag a címtárak színének megadásához
SymbolicLink – Beépített tag a szimbolikus hivatkozások színének megadásához
Futtatható – Beépített tag a futtatható fájlok színének megadásához.
bővítmény – Ezzel a tag használatával definiálhat színeket a különböző fájlkiterjesztésekhez. A bővítménytag előre definiálja az archív és PowerShell-fájlkiterjesztések színeit.
Az alábbi példa bemutatja, hogyan módosíthatja a különböző
FileInfobeállítások és fájlkiterjesztések színét. A színek úgy vannak kiválasztva, hogy jól működjenek a világos terminál hátterében.$PSStyle.FileInfo.Directory = $PSStyle.Background.FromRgb(0x2f6aff) + $PSStyle.Foreground.BrightWhite $PSStyle.FileInfo.SymbolicLink = $PSStyle.Foreground.Cyan $PSStyle.FileInfo.Executable = $PSStyle.Foreground.BrightMagenta $PSStyle.FileInfo.Extension['.ps1'] = $PSStyle.Foreground.Cyan $PSStyle.FileInfo.Extension['.ps1xml'] = $PSStyle.Foreground.Cyan $PSStyle.FileInfo.Extension['.psd1'] = $PSStyle.Foreground.Cyan $PSStyle.FileInfo.Extension['.psm1'] = $PSStyle.Foreground.Cyan
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 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 Get-PSReadLineOption és Set-PSReadLineOptionhasználatával kezelhetők.
-
Get-Error– a Get-Error parancsmag részletes nézetet ad vissza egy hiba objektumról, amely úgy van formázva, hogy könnyebben olvasható legyen. -
Select-String– A PowerShell 7.0-tól kezdődően Select-String ANSI-sorozatokkal emeli ki a kimenetben lévő egyező mintákat. -
Write-Progress– Az ANSI-kimenet kezelése a fent leírt$PSStyle.Progresshasználatával történik. További információkért lásd: Write-Progress
Kimenet átirányítása gazdagép módban
Alapértelmezés szerint a $PSStyle.OutputRendering be van állítva a gazdagépre. A rendszer eltávolítja az ANSI-escape szekvenciákat az átirányított vagy csővezérelt kimenetről.
OutputRendering csak a gazda, Out-Fileés Out-Stringrenderelésére vonatkozik. A natív végrehajtható fájlok kimenetét nem érinti.
A PowerShell 7.2.6 módosította a Out-File és a Out-String viselkedését a következő forgatókönyvek esetében:
- 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.
- Ha a bemeneti objektumra formázási nézetet kell alkalmazni, ezek a parancsmagok a OutputRendering beállítás alapján megőrzik vagy eltávolítják a formázási kimenet sztringjeinek menekülési sorozatait.
Ez a powershell 7.2-hez képest a parancsmagok kompatibilitástörő változása.
A OutputRendering nem vonatkozik a PowerShell-gazdagép folyamatának kimenetére, például ha a pwsh-t parancssorból futtatja, és átirányítja a kimenetet.
Az alábbi példában a PowerShell a bash-n keresztül fut Linuxon. A Get-ChildItem parancsmag ANSI-sel dekorált szöveget hoz létre. Mivel az átirányítás a bash folyamatban történik a PowerShell környezeten kívül, ezért a kimenetet nem befolyásolja a OutputRendering.
pwsh -NoProfile -Command 'Get-ChildItem' > out.txt
A out.txt tartalmának vizsgálatakor megjelennek az ANSI-feloldási sorozatok.
Ezzel szemben, ha az átirányítás a PowerShell-munkameneten belül történik, OutputRendering befolyásolja az átirányított kimenetet.
pwsh -NoProfile -Command 'Get-ChildItem > out.txt'
A out.txt tartalmának vizsgálatakor nincsenek ANSI-feloldási sorozatok.
ANSI-kimenet letiltása
Az ANSI-feloldósorozatok támogatása kikapcsolható a TERM vagy NO_COLOR környezeti változók használatával.
A $Env:TERM alábbi értékei az alábbiak szerint módosítják a viselkedést:
-
dumb–$Host.UI.SupportsVirtualTerminal = $falsebeállítása -
xterm-mono–$PSStyle.OutputRendering = PlainTextbeállítása -
xterm–$PSStyle.OutputRendering = PlainTextbeállítása
Ha $Env:NO_COLOR létezik, akkor a $PSStyle.OutputRendering be van állítva a PlainTextértékre. A NO_COLOR környezeti változóval kapcsolatos további információkért lásd: https://no-color.org/.
Használat $PSStyle a C-ből#
A C#-fejlesztők singletonként férhetnek hozzá a PSStyle-hoz, ahogyan az alábbi példában látható:
string output = $"{PSStyle.Instance.Foreground.Red}{PSStyle.Instance.Bold}Hello{PSStyle.Instance.Reset}";
PSStyle létezik a System.Management.Automation névtérben.
A PowerShell-motor a következő módosításokat tartalmazza:
- A PowerShell formázási rendszere a
$PSStyle.OutputRenderingtiszteletben tartása érdekében frissül. - A
StringDecoratedtípus hozzáadásra kerül az ANSI kódolt sztringek kezelésére. - A
string IsDecoratedlogikai tulajdonság hozzáadva igaz visszaadásához, ha a sztringESCvagyC1 CSIkaraktersorozatokat tartalmaz. - Egy karakterlánc
Lengthtulajdonsága visszaadja a szöveg hosszát az ANSI vezérlősorozatok nélkül. - 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ázatok formázása során a szövegrészek csonkításra kerüljenek, és megmaradjanak azok az ANSI vezérlősorozatok, amelyek nem foglalnak el nyomtatható karakterhelyet. - 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 aAnsiparamé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 programok, például a Windows Terminál, támogatják ezt a jelölést, ami a terminálban megjelenített szöveget kattinthatóvá teszi.
A PSStyle osztály statikus metódusai
A PowerShell 7.4 három új statikus metódust ad hozzá a [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 módszerek lehetővé teszik ConsoleColor értékeinek anSI-feloldósorozattá alakítását előtér- és háttérszínek, illetve mindkettő 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