about_ANSI_Terminals
簡単な説明
PowerShell で ANSI エスケープ シーケンスで使用できるサポートについて説明します。
詳細な説明
PowerShell には、PowerShell をホストしているターミナル アプリケーションでの出力のレンダリングを制御するための ANSI エスケープ シーケンスの使用をサポートする多くの機能があります。
PowerShell 7.2 では、ANSI 装飾テキストの出力をサポートするために、PowerShell エンジンに新しい自動変数、 $PSStyle
、および変更が追加されました。
ANSI ターミナルのサポート
ANSI 機能は、xterm ベースのターミナルと互換性のあるものに設計されています。 詳細については、Wikipedia の xterm を参照してください。
Windows 10 以降では、Windows コンソール ホストは xterm 互換です。 Windows ターミナル アプリケーションも xterm 互換です。
macOS では、既定のターミナル アプリケーションは xterm 互換です。
Linux の場合、各ディストリビューションには異なるターミナル アプリケーションが付属しています。 適切なターミナル アプリケーションを見つけるには、ディストリビューションのドキュメントを参照してください。
$PSStyle
変数には、次のプロパティがあります。
- リセット - すべての装飾をオフにします
- 点滅 - 点滅をオンにします
- BlinkOff - 点滅をオフにします
- 太字 - 太字をオンにします
- BoldOff - 太字をオフにします
- Dim - Dim をオンにします (PowerShell 7.4 で追加)
- DimOff - Dim をオフにします (PowerShell 7.4 で追加)
- 非表示 - 非表示をオンにします
- HiddenOff - 非表示をオフにします
- 反転 - 反転をオンにします
- ReverseOff - 反転をオフにします
- 斜体 - 斜体をオンにします
- ItalicOff - 斜体をオフにします
- 下線 - 下線をオンにします
- UnderlineOff - 下線をオフにします
- 取り消し線 - 取り消し線をオンにします
- StrikethroughOff - 取り消し線をオフにします
- OutputRendering - 出力レンダリングを使用するタイミングを制御する
- 書式設定 - 出力ストリームの既定の書式設定を制御する入れ子になったオブジェクト
- Progress - 進行状況バーのレンダリングを制御する入れ子になったオブジェクト
- FileInfo - FileInfo オブジェクトの色分けを制御する入れ子になったオブジェクト。
- Foreground - 前景の色分けを制御する入れ子になったオブジェクト
- 背景 - 背景の色分けを制御する入れ子になったオブジェクト
基本メンバーは、名前にマップされた ANSI エスケープ シーケンスの文字列を返します。 値は、カスタマイズできるように設定できます。 たとえば、太字を下線付きに変更できます。 プロパティ名を使用すると、タブ補完を使用して修飾文字列を簡単に作成できます。
"$($PSStyle.Background.BrightCyan)Power$($PSStyle.Underline)$($PSStyle.Bold)Shell$($PSStyle.Reset)"
次のメンバーは、ANSI 書式を使用する方法とタイミングを制御します。
$PSStyle.OutputRendering
は、値を持つSystem.Management.Automation.OutputRendering
列挙型です。ANSI
: ANSI エスケープ シーケンスは常にそのまま渡されます。重要
出力をダウンストリームで実行することを目的としたファイルまたはパイプラインにリダイレクトする場合は、 ANSI モードを使用する必要があります。 これにより、出力が変更されないようにします。 他のモードを使用すると、ANSI エスケープ シーケンスを削除することで出力が変更され、実行動作が変更される可能性があります。
PlainText
: ANSI エスケープ シーケンスは常に削除され、プレーン テキストのみになります。 リモート セッションでは、リモート ホストがPlainText
に設定されている場合、出力はローカル クライアントに送り返す前に ANSI エスケープ シーケンスから削除されます。Host
: これが既定の動作です。 ANSI エスケープ シーケンスは、リダイレクトまたはパイプ出力から削除されます。 詳細については、「 出力のリダイレクト」を参照してください。
$PSStyle.Background
および$PSStyle.Foreground
メンバーは、16 色の標準コンソールの ANSI エスケープ シーケンスを含む文字列です。Black
BrightBlack
White
BrightWhite
Red
BrightRed
Magenta
BrightMagenta
Blue
BrightBlue
Cyan
BrightCyan
Green
BrightGreen
Yellow
BrightYellow
値は設定可能であり、任意の数の ANSI エスケープ シーケンスを含めることができます。 24 ビットの色を指定する
FromRgb()
メソッドもあります。FromRgb()
メソッドを呼び出すには、2 つの方法があります。string FromRgb(byte red, byte green, byte blue) string FromRgb(int rgb)
次の例では、24 ビットカラー
Beige
の背景色を設定します。$PSStyle.Background.FromRgb(245, 245, 220) $PSStyle.Background.FromRgb(0xf5f5dc)
$PSStyle.Formatting
は、デバッグ、エラー、詳細、警告メッセージ、およびリストおよびテーブル ヘッダーの既定の書式設定を制御する入れ子になったオブジェクトです。 太字や下線などの属性を制御することもできます。$Host.PrivateData
は、レンダリングの書式設定の色を管理する方法として置き換えられます。$Host.PrivateData
は下位互換性のために存在し続けますが、$PSStyle.Formatting
に接続されていません。$PSStyle.Formatting
には、次のメンバーがあります。- FormatAccent - リスト アイテムの書式設定
- ErrorAccent - エラー メタデータの書式設定
- エラー - エラー メッセージの書式設定
- 警告 - 警告メッセージの書式設定
- Verbose - 詳細メッセージの書式設定
- デバッグ - デバッグ メッセージの書式設定
- TableHeader - テーブル ヘッダーの書式設定
- CustomTableHeaderLabel - オブジェクトの実際のプロパティではないテーブル ヘッダーの書式設定
- FeedbackName - フィードバック プロバイダー名の書式設定 (PowerShell 7.4 の実験用機能として追加)
- FeedbackText - フィードバック メッセージの書式設定 (PowerShell 7.4 の実験用機能として追加)
- FeedbackAction - フィードバック プロバイダーが推奨するアクションの書式設定 (PowerShell 7.4 の実験用機能として追加)
$PSStyle.Progress
では、進行状況ビュー バーのレンダリングを制御できます。- スタイル - レンダリング スタイルを設定する ANSI 文字列。
- MaxWidth - ビューの最大幅を設定します。 既定値は
120
です。 最小値は 18 です。 - ビュー - 値、
Minimal
、Classic
を含む列挙型。Classic
は変更なしの既存の表示です。Minimal
は単一行の最小表示です。Minimal
は既定値です。 - UseOSCIndicator - 既定値は
$false
です。 OSC インジケーターをサポートする端末の$true
に設定します。
Note
ホストで仮想ターミナルがサポートされていない場合、
$PSStyle.Progress.View
は自動的にClassic
に設定されます。次の使用例は、レンダリング スタイルを最小プログレス バーに設定します。
$PSStyle.Progress.View = 'Minimal'
$PSStyle.FileInfo
は、 FileInfo オブジェクトの色分けを制御する入れ子になったオブジェクトです。- ディレクトリ - ディレクトリの色を指定する組み込みメンバー
- SymbolicLink - シンボリック リンクの色を指定する組み込みメンバー
- Executable - 実行可能ファイルの色を指定する組み込みメンバー。
- 拡張機能 - このメンバーを使用して、さまざまなファイル拡張子の色を定義します。 Extension メンバーには、アーカイブと PowerShell ファイルの拡張機能があらかじめ含まれています。
ANSI 出力を生成するコマンドレット
- markdown コマンドレット - Show-Markdown コマンドレットは、マークダウン テキストを含むファイルの内容を表示します。 出力は、さまざまなスタイルを表すために ANSI シーケンスを使用してレンダリングされます。 スタイルの定義は、 Get-MarkdownOption および Set-MarkdownOption コマンドレットを使用して管理できます。
- PSReadLine コマンドレット - PSReadLine モジュールは ANSI シーケンスを使用して、コマンド ラインで PowerShell 構文要素を色分けします。 色は、 Get-PSReadLineOption および Set-PSReadLineOption を使用して管理できます。
Get-Error
- Get-Error コマンドレットは、読みやすくするために書式設定された Error オブジェクトの詳細ビューを返します。Select-String
- PowerShell 7.0 以降では、 Select-String は ANSI シーケンスを使用して出力内の一致パターンを強調表示します。Write-Progress
- ANSI 出力は、前述のように、$PSStyle.Progress
を使用して管理されます。 詳細については、「 Write-Progress」を参照してください。
Host
モードでの出力のリダイレクト
既定では、 $PSStyle.OutputRendering
は Host に設定されます。 ANSI エスケープ シーケンスは、リダイレクトまたはパイプ出力から削除されます。
OutputRendering は、ホスト、 Out-File
、および Out-String
でのレンダリングにのみ適用されます。 ネイティブ実行可能ファイルからの出力は影響を受けません。
PowerShell 7.2.6 では、次のシナリオで Out-File
と Out-String
の動作が変更されました。
- 入力オブジェクトが純粋な文字列の場合、これらのコマンドレットは、 OutputRendering 設定に関係なく、文字列を変更しません。
- 入力オブジェクトに書式設定ビューを適用する必要がある場合、これらのコマンドレットは、 OutputRendering 設定に基づいて、書式設定出力文字列のエスケープ シーケンスを保持または削除します。
これは、PowerShell 7.2 と比較して、これらのコマンドレットの破壊的変更です。
OutputRendering は、コマンド ラインから pwsh
を実行して出力をリダイレクトする場合など、PowerShell ホスト プロセスからの出力には適用されません。
次の例では、PowerShell は Linux 上で bash
から実行されます。 Get-ChildItem
コマンドレットは、ANSI で修飾されたテキストを生成します。 リダイレクトは、 bash
プロセスで PowerShell ホストの外部で行われるため、出力は OutputRendering の影響を受けません。
pwsh -noprofile -command 'Get-Childitem' > out.txt
out.txt
の内容を調べると、ANSI エスケープ シーケンスが表示されます。
これに対し、PowerShell セッション内でリダイレクトが行われると、 OutputRendering はリダイレクトされた出力に影響します。
pwsh -noprofile -command 'Get-Childitem > out.txt'
out.txt
の内容を調べると、ANSI エスケープ シーケンスはありません。
ANSI 出力の無効化
ANSI エスケープ シーケンスのサポートは、TERM または NO_COLOR 環境変数を使用して無効にすることができます。
$env:TERM
の次の値は、動作を次のように変更します。
dumb
-設定$Host.UI.SupportsVirtualTerminal = $false
xterm-mono
-設定$PSStyle.OutputRendering = PlainText
xtermm
-設定$PSStyle.OutputRendering = PlainText
$env:NO_COLOR
が存在する場合、$PSStyle.OutputRendering
は PlainText に設定されます。 NO_COLOR環境変数の詳細については、「https://no-color.org/」を参照してください。
C からの $PSStyle
の使用#
C# 開発者は、次の例に示すように、シングルトンとして PSStyle
にアクセスできます。
string output = $"{PSStyle.Instance.Foreground.Red}{PSStyle.Instance.Bold}Hello{PSStyle.Instance.Reset}";
PSStyle
は、System.Management.Automation 名前空間に存在します。
PowerShell エンジンには、次の変更が含まれています。
- PowerShell の書式設定システムが、
$PSStyle.OutputRendering
を考慮するように更新されます。 - ANSI エスケープ文字列を処理するために、
StringDecorated
型が追加されます。 - 文字列に
ESC
またはC1 CSI
文字シーケンスが含まれている場合にtrue を返すために、string IsDecorated
ブール型プロパティが追加されました。 - 文字列の
Length
プロパティは、ANSI エスケープ シーケンスのないテキストの長さを返します。 StringDecorated Substring(int contentLength)
メソッドは、ANSI エスケープ シーケンスの一部ではないコンテンツ長までのインデックス 0 から始まる部分文字列を返します。 これは、テーブルの書式設定が文字列を切り捨て、印刷可能な文字領域を占有しない ANSI エスケープ シーケンスを保持するために必要です。string ToString()
メソッドは同じままで、文字列のプレーンテキスト バージョンを返します。Ansi
パラメーターがtrue の場合、string ToString(bool Ansi)
メソッドは生の ANSI 埋め込み文字列返。 それ以外の場合は、ANSI エスケープ シーケンスが削除されたプレーンテキスト バージョンが返されます。FormatHyperlink(string text, uri link)
メソッドは、ハイパーリンクを装飾するために使用される ANSI エスケープ シーケンスを含む文字列を返します。 Windows ターミナルなどの一部のターミナル ホストは、このマークアップをサポートしていて、これにより、レンダリングされたテキストがターミナルでクリック可能になります。
PSStyle クラスの静的メソッド
PowerShell 7.4 では、 [System.Management.Automation.PSStyle]
クラスに 3 つの新しい静的メソッドが追加されます。
[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)
これらのメソッドは、前景色と背景色、または両方の組み合わせのために、 ConsoleColor 値を ANSI エスケープ シーケンスに変換する方法を提供します。
次の例は、これらのメソッドによって生成される ANSI エスケープ シーケンスを示しています。
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
関連項目
PowerShell