Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Krátký popis
Popisuje podporu řídicích sekvencí ANSI v PowerShellu.
Dlouhý popis
PowerShell má mnoho funkcí, které podporují použití řídicích sekvencí ANSI k řízení vykreslování výstupu v terminálové aplikaci, která je hostitelem PowerShellu.
PowerShell 7.2 přidal novou automatickou proměnnou $PSStylea změny modulu PowerShellu pro podporu výstupu textu zdobeného ANSI.
Podpora terminálu ANSI
Funkce ANSI jsou navrženy tak, aby byly kompatibilní s terminály založenými na Xterm. Další informace najdete v tématu xterm na Wikipedii.
V systému Windows 10 a vyšší je hostitel konzoly systému Windows kompatibilní s xterm. Aplikace Terminál Windows je také kompatibilní s xterm.
V systému macOS je výchozí terminálová aplikace kompatibilní s xterm.
Pro Linux se každá distribuce dodává s jinou terminálovou aplikací. V dokumentaci k distribuci vyhledejte vhodnou terminálovou aplikaci.
$PSStyle
Proměnná má následující vlastnosti:
- Reset - Vypne všechny dekorace.
- Blink – zapne blikací
- BlinkOff – vypne blikací
- Tučné – zapne tučné písmo
- BoldOff – vypne tučné písmo
- Dim – Zapne dim (přidá se do PowerShellu 7.4)
- DimOff – Vypne dim off (přidáno v PowerShellu 7.4)
- Skryté – zapne skryté
- HiddenOff – vypne skryté
- Obrácení – zapne zpětnou zpětnou zpětnou zpětnou závislosti
- ReverseOff – vypne obrácení
- Kurzíva – zapne kurzívu
- Kurzíva – Vypne kurzívu
- Podtržení – zapne podtržení
- Podtržení – vypne podtržení
- Přeškrtnutí – zapne přeškrtnutí
- StrikethroughOff - Vypne přeškrtnutí
- OutputRendering – řízení, kdy se používá vykreslování výstupu
- Formátování – vnořený objekt, který řídí výchozí formátování výstupních datových proudů
- Průběh – vnořený objekt, který řídí vykreslování indikátorů průběhu
- FileInfo – Vnořený objekt pro řízení barvení FileInfo objektů.
- Popředí – Vnořený objekt pro řízení barvení popředí
- Pozadí – vnořený objekt pro řízení barvení pozadí
Základní členové vracejí řetězce řídicích sekvencí ANSI mapovaných na jejich názvy. Hodnoty jsou nastavené tak, aby umožňovaly přizpůsobení. Můžete například změnit tučné písmo na podtržené. Názvy vlastností usnadňují vytváření zdobených řetězců pomocí dokončování tabulátoru:
"$($PSStyle.Background.BrightCyan)Power$($PSStyle.Underline)$($PSStyle.Bold)Shell$($PSStyle.Reset)"
Následující členové určují, jak nebo kdy se používá formátování ANSI:
$PSStyle.OutputRenderingSystem.Management.Automation.OutputRenderingje výčet s hodnotami:ANSI: Řídicí sekvence ANSI se vždy předávají tak, jak jsou.Důležité
Režim ANSI byste měli použít při přesměrování výstupu do souboru nebo kanálu, který má být spuštěn podřízený. Tím se zajistí, že se výstup nezmění. Použití jakéhokoli jiného režimu změní výstup odebráním řídicích sekvencí ANSI, které mohou změnit chování provádění.
PlainText: Řídicí sekvence ANSI jsou vždy oříznuté, takže je to jenom prostý text. Ve vzdálených relacích, pokud je vzdálený hostitel nastavený naPlainText, výstup se před odesláním zpět do místního klienta odstraní řídicí sekvence ANSI.Host: Toto je výchozí chování. Řídicí sekvence ANSI se odeberou z přesměrovaného nebo svislého výstupu. Další informace najdete v tématu Přesměrování výstupu.
$PSStyle.BackgroundČlenové$PSStyle.Foregroundjsou řetězce, které obsahují řídicí sekvence ANSI pro 16 standardních barev konzoly.BlackBrightBlackWhiteBrightWhiteRedBrightRedMagentaBrightMagentaBlueBrightBlueCyanBrightCyanGreenBrightGreenYellowBrightYellow
Hodnoty jsou nastavené a mohou obsahovat libovolný počet řídicích sekvencí ANSI. Existuje také
FromRgb()metoda pro určení 24bitové barvy. MetoduFromRgb()lze volat dvěma způsoby.string FromRgb(byte red, byte green, byte blue) string FromRgb(int rgb)V některém z následujících příkladů je nastavena barva pozadí 24bitová barva
Beige.$PSStyle.Background.FromRgb(245, 245, 220) $PSStyle.Background.FromRgb(0xf5f5dc)$PSStyle.Formattingje vnořený objekt pro řízení výchozího formátování ladění, chyby, podrobné zprávy, upozornění a záhlaví seznamu a tabulky. Můžete také řídit atributy, jako je tučné písmo a podtržení.$Host.PrivateDataNahrazuje se jako způsob správy barev pro vykreslování formátování.$Host.PrivateDatanadále existuje kvůli zpětné kompatibilitě, ale není připojen k$PSStyle.Formatting.$PSStyle.Formattingmá následující členy:- FormatAccent – formátování položek seznamu
- ErrorAccent – formátování metadat chyb
- Chyba – formátování chybových zpráv
- Upozornění – formátování pro zprávy upozornění
- Podrobné – formátování pro podrobné zprávy
- Ladění – formátování pro ladicí zprávy
- TableHeader – formátování záhlaví tabulky
- CustomTableHeaderLabel – formátování pro záhlaví tabulky, které ve skutečnosti nemají vlastnosti objektu
- FeedbackName – formátování názvu poskytovatele zpětné vazby (přidané jako experimentální funkce v PowerShellu 7.4)
- FeedbackText – formátování zpráv zpětné vazby (přidáno jako experimentální funkce v PowerShellu 7.4)
- FeedbackAction – formátování navrhovaných akcí poskytovatele zpětné vazby (přidané jako experimentální funkce v PowerShellu 7.4)
$PSStyle.Progressumožňuje řídit vykreslování pruhů zobrazení průběhu.- Styl – řetězec ANSI, který nastavuje styl vykreslování.
-
MaxWidth – nastaví maximální šířku zobrazení. Výchozí hodnota
120je . Minimální hodnota je 18. -
Zobrazení – výčet s hodnotami
MinimalaClassic.Classicje stávající vykreslování beze změn.Minimalje jeden řádek s minimálním vykreslováním.Minimalje výchozí možnost. -
UseOSCIndicator – nastavuje se na výchozí hodnotu
$false. Nastavte tuto možnost$truepro terminály, které podporují indikátory OSC.
Poznámka:
Pokud hostitel nepodporuje virtuální terminál,
$PSStyle.Progress.Viewnastaví se automaticky naClassichodnotu .Následující příklad nastaví styl vykreslování na minimální indikátor průběhu.
$PSStyle.Progress.View = 'Minimal'$PSStyle.FileInfoje vnořený objekt pro řízení barvení FileInfo objektů.Adresář – předdefinovaný člen pro určení barvy pro adresáře
Symbolický odkaz – Integrovaný člen pro určení barvy symbolických odkazů
Spustitelný soubor – předdefinovaný člen, který určuje barvu spustitelných souborů.
Přípona – Tento člen slouží k definování barev pro různé přípony souborů. Člen rozšíření předdefinuje barvy pro archivaci a přípony souborů PowerShellu.
Následující příklad ukazuje, jak změnit barvy pro různá
FileInfonastavení a konkrétní přípony souborů. Barvy jsou zvoleny tak, aby dobře fungovaly na světlém pozadí terminálu.$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
Rutiny, které generují výstup ANSI
- Rutiny Markdownu – rutina Show-Markdown zobrazuje obsah souboru obsahujícího text markdownu. Výstup se vykreslí pomocí sekvencí ANSI, které představují různé styly. Definice stylů můžete spravovat pomocí rutin Get-MarkdownOption a Set-MarkdownOption.
- Rutiny PSReadLine – modul PSReadLine používá sekvence ANSI k obarvení elementů syntaxe PowerShellu na příkazovém řádku. Barvy je možné spravovat pomocí metody Get-PSReadLineOption a Set-PSReadLineOption.
-
Get-Error– Rutina Get-Error vrátí podrobné zobrazení objektu Error naformátované tak, aby se snadněji četlo. -
Select-String– Počínaje PowerShellem 7.0 používá select-string sekvence ANSI ke zvýraznění odpovídajících vzorů ve výstupu. -
Write-Progress– Výstup ANSI se spravuje pomocí$PSStyle.Progress, jak je popsáno výše. Další informace najdete v tématu Průběh zápisu.
Přesměrování výstupu v režimu hostitele
Ve výchozím nastavení $PSStyle.OutputRendering je nastavená hodnota Hostitel. Řídicí sekvence ANSI se odeberou z přesměrovaného nebo svislého výstupu.
OutputRendering se vztahuje pouze na vykreslování v hostiteli Out-File, a Out-String. Výstup z nativních spustitelných souborů není ovlivněn.
PowerShell 7.2.6 změnil chování Out-File a Out-String pro následující scénáře:
- Pokud je vstupní objekt čistým řetězcem, tyto rutiny zachovávají řetězec bez ohledu na nastavení OutputRendering .
- Pokud vstupní objekt musí mít použité zobrazení formátování, tyto rutiny zachovají nebo odeberou řídicí sekvence z výstupních řetězců formátování na základě nastavení OutputRendering .
Jedná se o zásadní změnu v těchto rutinách v porovnání s PowerShellem 7.2.
OutputRendering se nevztahuje na výstup z hostitelského procesu PowerShellu, například při spuštění pwsh z příkazového řádku a přesměrování výstupu.
V následujícím příkladu se PowerShell spouští v Linuxu z bash. Rutina Get-ChildItem vytvoří text zdobený ANSI. Vzhledem k tomu, že přesměrování probíhá v bash procesu, mimo hostitele PowerShellu, výstup není ovlivněn výstupem OutputRendering.
pwsh -NoProfile -Command 'Get-ChildItem' > out.txt
Při kontrole obsahu out.txt uvidíte řídicí sekvence ANSI.
Naproti tomu pokud dojde k přesměrování v rámci relace PowerShellu, má outputRendering vliv na přesměrovaný výstup.
pwsh -NoProfile -Command 'Get-ChildItem > out.txt'
Při kontrole obsahu out.txt neexistují žádné řídicí sekvence ANSI.
Zakázání výstupu ANSI
Podporu řídicích sekvencí ANSI je možné vypnout pomocí proměnné prostředí TERM nebo NO_COLOR .
Následující hodnoty $Env:TERM chování změní následujícím způsobem:
-
dumb-nastavuje$Host.UI.SupportsVirtualTerminal = $false -
xterm-mono-nastavuje$PSStyle.OutputRendering = PlainText -
xterm-nastavuje$PSStyle.OutputRendering = PlainText
Pokud $Env:NO_COLOR existuje, je $PSStyle.OutputRendering nastavena na PlainText. Další informace o proměnné prostředí NO_COLOR naleznete v tématu https://no-color.org/.
Použití z jazyka $PSStyle C#
Vývojáři v jazyce C# mají přístup PSStyle jako jednoúčelový přístup, jak je znázorněno v následujícím příkladu:
string output = $"{PSStyle.Instance.Foreground.Red}{PSStyle.Instance.Bold}Hello{PSStyle.Instance.Reset}";
PSStyle existuje v oboru názvů System.Management.Automation.
Modul PowerShellu obsahuje následující změny:
- Systém formátování PowerShellu se aktualizuje tak, aby respektoval
$PSStyle.OutputRendering. - Tento
StringDecoratedtyp se přidá pro zpracování řídicích řetězců ANSI. -
string IsDecoratedLogická vlastnost byla přidána k vrácení true, pokud řetězec obsahujeESCneboC1 CSIznakové sekvence. -
LengthVlastnost řetězce vrátí délku textu bez řídicích sekvencí ANSI. - Metoda
StringDecorated Substring(int contentLength)vrátí podřetězdí začínající indexem 0 až do délky obsahu, která není součástí řídicích sekvencí ANSI. To je potřeba pro formátování tabulky, aby se zkrátily řetězce a zachovaly řídicí sekvence ANSI, které nezabírají tisknutelnou mezeru znaků. - Metoda
string ToString()zůstane stejná a vrátí verzi řetězce ve formátu prostého textu. - Metoda
string ToString(bool Ansi)vrátí nezpracovaný vložený řetězec ANSI, pokudAnsije parametr pravdivý. V opačném případě se vrátí verze prostého textu s odebranými řídicími sekvencemi ANSI. - Metoda
FormatHyperlink(string text, uri link)vrátí řetězec obsahující řídicí sekvence ANSI použité k dekoraci hypertextových odkazů. Někteří hostitelé terminálu, jako je Terminál Windows, podporují tento kód, takže vykreslený text je možné kliknout v terminálu.
Statické metody třídy PSStyle
PowerShell 7.4 přidá do [System.Management.Automation.PSStyle] třídy tři nové statické metody.
[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)
Tyto metody poskytují způsob, jak převést hodnoty ConsoleColor na řídicí sekvence ANSI pro popředí a barvy pozadí nebo pro kombinaci obou.
Následující příklady ukazují řídicí sekvence ANSI vytvořené těmito metodami.
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