about_ANSI_Terminals

ANSI エスケープ シーケンスのサポート

PowerShell には、PowerShell をホストしているターミナル アプリケーションでの出力のレンダリングを制御するための ANSI エスケープ シーケンスの使用をサポートする多くの機能があります。

PowerShell 7.2 では、新しい自動変数が追加され、 $PSStyleANSI で装飾されたテキストの出力をサポートするために PowerShell エンジンに変更が加えられています。

ターミナルのサポート

ANSI 機能は、xterm ベースの端子と互換性のあるものに設計されています。 詳細については、Wikipedia の xterm を参照してください。

Windows 10以降では、Windows コンソール ホストは xterm 互換です。 Windows ターミナル アプリケーションも xterm 互換です。

macOSでは、既定のターミナル アプリケーションは xterm 互換です。

Linux の場合、各ディストリビューションには異なるターミナル アプリケーションが付属しています。 適切なターミナル アプリケーションを見つけるには、ディストリビューションのドキュメントを参照してください。

$PSStyle

変数には、次のプロパティが含まれています。

  • リセット - すべての装飾をオフにする
  • 点滅 - 点滅をオンにする
  • BlinkOff - 点滅をオフにする
  • 太字 - 太字 をオンにします
  • BoldOff - 太字をオフにする
  • 非表示 - 非表示をオンにする
  • HiddenOff - 非表示をオフにする
  • 反転 - 反転オン
  • ReverseOff - 反転オフ
  • 斜体 - 斜体をオンにする
  • ItalicOff - 斜体をオフにします
  • 下線 - 下線をオンにします
  • UnderlineOff - 下線をオフにします
  • OutputRendering - 出力レンダリングを使用するタイミングを制御する
  • 背景 - 背景の色分けを制御する入れ子になったオブジェクト
  • Foreground - 前景の色分けを制御する入れ子になったオブジェクト
  • 書式設定 - 出力ストリームの既定の書式設定を制御する入れ子になったオブジェクト
  • Progress - 進行状況 バーのレンダリングを制御する入れ子になったオブジェクト
  • FileInfo - (試験段階) FileInfo オブジェクトの色分けを制御する入れ子になったオブジェクト。

基本メンバーは、名前にマップされた ANSI エスケープ シーケンスの文字列を返します。 値は、カスタマイズできるように設定できます。 たとえば、太字を下線付きに変更できます。 プロパティ名を使用すると、タブ補完を使用して装飾文字列を簡単に作成できます。

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

次のメンバーは、ANSI 書式を使用する方法とタイミングを制御します。

  • $PSStyle.OutputRendering は、値を System.Management.Automation.OutputRendering 持つ列挙型です。

    • ANSI: これは既定の動作です。 ANSI は常にそのまま渡されます。
    • PlainText: ANSI エスケープ シーケンスは常に削除され、プレーン テキストのみになります。
    • ホスト: ANSI エスケープ シーケンスは、リダイレクトまたはパイプで削除されます

    注意

    $PSStyle.OutputRenderingは、Out-File``Out-Stringホストでのレンダリングにのみ適用されます。 およびOut-StringコマンドレットはOut-File、OutputRendering の値に基づいて純粋な文字列入力を変更できます。

  • メンバー $PSStyle.Background$PSStyle.Foreground 、16 色の標準コンソールの ANSI エスケープ シーケンスを含む文字列です。

    • Black
    • BrightBlack
    • White
    • BrightWhite
    • [赤]
    • BrightRed
    • 赤紫
    • BrightMagenta
    • BrightBlue
    • シアン
    • BrightCyan
    • BrightGreen
    • BrightYellow

    値は設定可能であり、任意の数の ANSI エスケープ シーケンスを含めることができます。 24 ビットカラーを指定する方法もあります FromRgb() 。 メソッドを呼び出すには FromRgb() 、2 つの方法があります。

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

    次のいずれかの例では、背景色を 24 ビットカラー のベージュ に設定します。

    $PSStyle.Background.FromRgb(245, 245, 220)
    $PSStyle.Background.FromRgb(0xf5f5dc)
    
  • $PSStyle.Formatting は、デバッグ、エラー、詳細、および警告メッセージの既定の書式設定を制御する入れ子になったオブジェクトです。 太字や下線などの属性を制御することもできます。 これは、レンダリングを $Host.PrivateData 書式設定するための色を管理する方法として置き換えられます。 $Host.PrivateData は下位互換性のために引き続き存在しますが、 $PSStyle.Formatting. $PSStyle.Formatting には、次のメンバーが含まれています。

    • FormatAccent
    • TableHeader
    • ErrorAccent
    • Error
    • 警告
    • 詳細
    • デバッグ
  • $PSStyle.Progress では、進行状況ビュー バーのレンダリングを制御できます。

    • スタイル - レンダリング スタイルを設定する ANSI 文字列。
    • MaxWidth - ビューの最大幅を設定します。 既定値は 120 です。 最小値は 18 です。
    • ビュー - 値を持つ列挙型、 Minimal および Classic. Classic は変更なしの既存の表示です。 Minimal は単一行の最小表示です。 Minimal が既定値です。
    • UseOSCIndicator - 既定値は $false. OSC インジケーターを $true サポートする端末の場合は、これを設定します。

    注意

    ホストで仮想ターミナルがサポートされていない場合、$PSStyle.Progress.View は自動的に Classic に設定されます。

    次の使用例は、レンダリング スタイルを最小進行状況バーに設定します。

    $PSStyle.Progress.View = 'Minimal'
    
  • $PSStyle.FileInfo は、 FileInfo オブジェクトの色分けを制御する入れ子になったオブジェクトです。

    • ディレクトリ - ディレクトリ の色を指定する組み込みメンバー
    • SymbolicLink - シンボリック リンクの色を指定する組み込みメンバー
    • 実行可能ファイル - 実行可能ファイル の色を指定する組み込みメンバー。
    • Extension - このメンバーを使用して、さまざまなファイル拡張子の色を定義します。 Extension メンバーには、アーカイブと PowerShell ファイルの拡張機能があらかじめ含まれています。

    注意

    $PSStyle.FileInfo は、実験機能 ia が PSAnsiRenderingFileInfo 有効になっている場合にのみ使用できます。 詳細については、「 about_Experimental_Features実験機能の使用」を参照してください。

ANSI 出力を生成するコマンドレット

  • markdown コマンドレット - Show-Markdown コマンドレットは、マークダウン テキストを含むファイルの内容を表示します。 出力は、さまざまなスタイルを表すために ANSI シーケンスを使用してレンダリングされます。 Get-MarkdownOption コマンドレットと Set-MarkdownOption コマンドレットを使用して、スタイルの定義を管理できます。
  • PSReadLine コマンドレット - PSReadLine モジュールは ANSI シーケンスを使用して、コマンド ラインで PowerShell 構文要素を色付けします。 色は 、Get-PSReadLineOptionSet-PSReadLineOption を使用して管理できます。
  • Get-Error - Get-Error コマンドレットは、読みやすくするために書式設定された Error オブジェクトの詳細ビューを提供します。
  • Select-String - PowerShell 7.0 以降、 Select-String は ANSI シーケンスを使用して、出力内の一致するパターンを強調表示します。
  • Write-Progress - ANSI 出力は、前述のように、使用して $PSStyle.Progress管理されます。 詳細については、「書き込み進行状況」を参照してください。

ANSI 出力の無効化

ANSI エスケープ シーケンスのサポートは、TERM または NO_COLOR 環境変数を使用して無効にすることができます。

$env:TERM の次の値は、動作を次のように変更します。

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

存在する場合$env:NO_COLORは、$PSStyle.OutputRenderingPlainText に設定されます。 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 ターミナルなどの一部のターミナル ホストは、このマークアップをサポートしていて、これにより、レンダリングされたテキストがターミナルでクリック可能になります。