about_ANSI_Terminals
簡単な説明
PowerShell で ANSI エスケープ シーケンスで使用できるサポートについて説明します。
詳細な説明
PowerShell には、PowerShell をホストしているターミナル アプリケーションでの出力のレンダリングを制御するための ANSI エスケープ シーケンスの使用をサポートする多くの機能があります。
PowerShell 7.2 では、新しい自動変数と、 $PSStyle
ANSI で修飾されたテキストの出力をサポートするように PowerShell エンジンに変更が追加されました。
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 - 下線をオフにします
- 取り消し線 - 取り消し線をオンにします
- 取り消し線オフ - 取り消し線をオフにします
- 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 - エラー メタデータの書式設定
- エラー - エラー メッセージの書式設定
- 警告 - 警告 メッセージの書式設定
- 詳細 - 詳細 メッセージの書式設定
- デバッグ - デバッグ メッセージの書式設定
- 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 - シンボリック リンクの色を指定する組み込みメンバー
- 実行可能ファイル - 実行可能ファイル の色を指定する組み込みメンバー。
- 拡張機能 - このメンバーを使用して、さまざまなファイル拡張子の色を定義します。 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
管理されます。 詳細については、「書き込み進行状況」を参照してください 。
モードでの出力の 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 で修飾されたテキストを生成します。 リダイレクトは PowerShell ホストの外部でプロセスで bash
行われるため、出力は 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
を考慮するように更新されます。 StringDecorated
ANSI エスケープ文字列を処理するために型が追加されます。string IsDecorated
文字列に文字シーケンスが含まれている場合に true を返すブール型プロパティがESC
C1 CSI
追加されました。- 文字列のプロパティは
Length
、ANSI エスケープ シーケンスのないテキストの長さを返します。 - このメソッドは
StringDecorated Substring(int contentLength)
、ANSI エスケープ シーケンスの一部ではないコンテンツ長まで、インデックス 0 から始まる部分文字列を返します。 これは、テーブルの書式設定が文字列を切り捨て、印刷可能な文字領域を占有しない ANSI エスケープ シーケンスを保持するために必要です。 - このメソッドは
string ToString()
同じままで、文字列のプレーンテキスト バージョンを返します。 - パラメーターが true の場合、このメソッドは
string ToString(bool Ansi)
生の ANSI 埋め込み文字列をAnsi
返します。 それ以外の場合は、ANSI エスケープ シーケンスが削除されたプレーンテキスト バージョンが返されます。 - このメソッドは
FormatHyperlink(string text, uri link)
、ハイパーリンクを装飾するために使用される ANSI エスケープ シーケンスを含む文字列を返します。 Windows ターミナルなどの一部のターミナル ホストは、このマークアップをサポートしていて、これにより、レンダリングされたテキストがターミナルでクリック可能になります。
PSStyle クラスの静的メソッド
PowerShell 7.4 では、クラスに 3 つの新しい静的メソッドが [System.Management.Automation.PSStyle]
追加されます。
[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