Bagikan melalui


tentang_ANSI_Terminals

Deskripsi singkat

Menjelaskan dukungan yang tersedia untuk urutan escape ANSI di PowerShell.

Deskripsi panjang

PowerShell memiliki banyak fitur yang mendukung penggunaan urutan escape ANSI untuk mengontrol penyajian output di aplikasi terminal yang menghosting PowerShell.

PowerShell 7.2 menambahkan variabel otomatis baru, $PSStyle, dan perubahan pada mesin PowerShell untuk mendukung output teks yang dihiasi ANSI.

Dukungan Terminal ANSI

Fitur ANSI dirancang agar kompatibel dengan terminal berbasis xterm. Untuk informasi selengkapnya, lihat xterm di Wikipedia.

Pada Windows 10 dan yang lebih tinggi, Host Konsol Windows kompatibel dengan xterm. Aplikasi Terminal Windows juga kompatibel dengan xterm.

Di macOS, aplikasi terminal default kompatibel dengan xterm.

Untuk Linux, setiap distribusi dikirim dengan aplikasi terminal yang berbeda. Lihat dokumentasi distribusi Anda untuk menemukan aplikasi terminal yang sesuai.

$PSStyle

Variabel memiliki properti berikut:

  • Reset - Menonaktifkan semua dekorasi
  • Blink - Mengaktifkan Blink
  • BlinkOff - Mematikan Blink
  • Tebal - Aktifkan Tebal
  • BoldOff - Menonaktifkan Tebal
  • Dim - Menghidupkan Dim (ditambahkan di PowerShell 7.4)
  • DimOff - Menonaktifkan Dim (ditambahkan di PowerShell 7.4)
  • Tersembunyi - Aktifkan Tersembunyi
  • HiddenOff - Nonaktifkan Tersembunyi
  • Terbalik - Mengaktifkan Balik
  • ReverseOff - Mematikan fungsi Reverse
  • Miring - Mengaktifkan Miring
  • ItalicOff - Nonaktifkan Huruf Miring
  • Garis Bawah - Mengaktifkan garis bawah
  • Garis BawahBuka - Menonaktifkan garis bawah
  • Strikethrough - Mengaktifkan coretan
  • StrikethroughOff - Mematikan fitur coret
  • OutputRendering - Mengontrol kapan penyajian output digunakan
  • Pemformatan - Objek berlapis yang mengontrol pemformatan default untuk aliran output
  • Kemajuan - Objek berlapis yang mengontrol penyajian bilah kemajuan
  • FileInfo - Objek berlapis untuk mengontrol pewarnaan objek FileInfo .
  • Latar Depan - Objek berlapis untuk mengontrol pewarnaan latar depan
  • Latar Belakang - Objek berlapis untuk mengontrol pewarnaan latar belakang

Anggota dasar mengembalikan string dari urutan escape ANSI yang dipetakan sesuai dengan namanya. Nilai diatur untuk memungkinkan kustomisasi. Misalnya, Anda bisa mengubah teks tebal menjadi garis bawah. Nama properti memudahkan Anda membuat string yang didekorasi menggunakan penyelesaian tab:

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

Anggota berikut mengontrol bagaimana atau kapan pemformatan ANSI digunakan:

  • $PSStyle.OutputRendering adalah enum System.Management.Automation.OutputRendering dengan nilai:

    • ANSI: Urutan pelarian ANSI selalu diteruskan melalui as-is.

      Penting

      Anda harus menggunakan mode ANSI saat mengalihkan output ke file atau alur yang dimaksudkan untuk dijalankan di hilir. Ini memastikan bahwa output tidak diubah. Menggunakan mode lain mengubah output dengan menghapus urutan escape ANSI, yang dapat mengubah perilaku eksekusi.

    • PlainText: Urutan escape ANSI selalu dilucuti sehingga hanya teks biasa. Dalam sesi jarak jauh, jika host jarak jauh disetel pada PlainText, keluaran dihapus dari urutan escape ANSI sebelum mengirimkannya kembali ke klien lokal.

    • Host: Ini adalah perilaku default. Urutan escape ANSI dihapus dari output yang dialihkan atau disalurkan. Untuk informasi selengkapnya, lihat Mengalihkan output.

  • Anggota $PSStyle.Background dan $PSStyle.Foreground adalah string yang berisi urutan escape ANSI untuk 16 warna konsol standar.

    • Black
    • BrightBlack
    • White
    • BrightWhite
    • Red
    • BrightRed
    • Magenta
    • BrightMagenta
    • Blue
    • BrightBlue
    • Cyan
    • BrightCyan
    • Green
    • BrightGreen
    • Yellow
    • BrightYellow

    Nilai dapat diatur dan dapat berisi sejumlah urutan escape ANSI. Ada juga metode FromRgb() untuk menentukan warna 24-bit. Ada dua cara untuk memanggil metode FromRgb().

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

    Salah satu contoh berikut mengatur warna latar belakang warna 24-bit Beige.

    $PSStyle.Background.FromRgb(245, 245, 220)
    $PSStyle.Background.FromRgb(0xf5f5dc)
    
  • $PSStyle.Formatting adalah objek bersarang untuk mengontrol pemformatan default dari debug, kesalahan, pesan rinci, peringatan, serta header daftar dan tabel. Anda juga dapat mengontrol atribut seperti tebal dan garis bawah. Ini menggantikan $Host.PrivateData sebagai cara untuk mengelola warna untuk penyajian pemformatan. $Host.PrivateData tetap ada untuk kompatibilitas dengan versi sebelumnya tetapi tidak terhubung ke $PSStyle.Formatting. $PSStyle.Formatting memiliki anggota berikut:

    • FormatAksen - pemformatan untuk item daftar
    • ErrorAccent - pemformatan untuk metadata kesalahan
    • Kesalahan - pemformatan untuk pesan kesalahan
    • Peringatan - pemformatan untuk pesan peringatan
    • Verbose - pemformatan untuk pesan verbose
    • Debug - pemformatan untuk pesan debug
    • TableHeader - pemformatan untuk header tabel
    • customTableHeaderLabel - pemformatan untuk header tabel yang sebenarnya bukan properti pada objek
    • FeedbackName - pemformatan untuk nama penyedia umpan balik (ditambahkan sebagai fitur eksperimental di PowerShell 7.4)
    • FeedbackText - pemformatan untuk pesan umpan balik (ditambahkan sebagai fitur eksperimental di PowerShell 7.4)
    • FeedbackAction - pemformatan untuk tindakan yang disarankan penyedia umpan balik (ditambahkan sebagai fitur eksperimental di PowerShell 7.4)
  • $PSStyle.Progress memungkinkan Anda mengontrol penyajian bilah tampilan kemajuan.

    • Gaya - String ANSI mengatur gaya penyajian.
    • MaxWidth - Mengatur lebar maksimum tampilan. Secara otomatis beralih ke 120. Nilai minimum adalah 18.
    • Tampilkan - Enum dengan nilai, Minimal, dan Classic. Classic adalah penyajian yang ada tanpa perubahan. Minimal adalah penyajian minimal satu baris. Minimal adalah default.
    • UseOSCIndicator - Default ke $false. Atur ini ke $true untuk terminal yang mendukung indikator OSC.

    Nota

    Jika host tidak mendukung Terminal Virtual, $PSStyle.Progress.View secara otomatis diatur ke Classic.

    Contoh berikut mengatur gaya rendering ke bilah kemajuan minimal.

    $PSStyle.Progress.View = 'Minimal'
    
  • $PSStyle.FileInfo adalah objek bertingkat untuk mengontrol pewarnaan objek FileInfo.

    • Direktori - Anggota bawaan untuk menentukan warna direktori

    • SymbolicLink - Anggota bawaan untuk menentukan warna untuk tautan simbolis

    • executable - Anggota bawaan untuk menentukan warna untuk executable.

    • Ekstensi - Gunakan anggota ini untuk menentukan warna untuk ekstensi file yang berbeda. Anggota Ekstensi menentukan warna untuk ekstensi file arsip dan PowerShell.

      Contoh berikut menunjukkan cara mengubah warna untuk berbagai FileInfo pengaturan dan ekstensi file tertentu. Warna dipilih untuk bekerja dengan baik pada latar belakang terminal ringan.

      $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
      

Cmdlet yang menghasilkan output ANSI

  • Cmdlet markdown - cmdlet Show-Markdown menampilkan isi file yang berisi teks markdown. Keluaran dihasilkan menggunakan urutan ANSI untuk mewakili gaya yang berbeda. Anda dapat mengelola definisi gaya format menggunakan cmdlet Get-MarkdownOption dan Set-MarkdownOption.
  • Cmdlet PSReadLine - modul PSReadLine menggunakan urutan ANSI untuk mewarnai elemen sintaks PowerShell pada baris perintah. Warna dapat dikelola menggunakan Get-PSReadLineOption dan Set-PSReadLineOption.
  • Get-Error - cmdlet Get-Error mengembalikan tampilan terperinci dari objek Kesalahan, yang diformat agar lebih mudah dibaca.
  • Select-String - Dimulai dengan PowerShell 7.0, Select-String menggunakan urutan ANSI untuk menyoroti pola yang cocok dalam output.
  • Write-Progress - Output ANSI dikelola menggunakan $PSStyle.Progress, seperti yang dijelaskan di atas. Untuk informasi selengkapnya, lihat Write-Progress

Mengalihkan output dalam mode Host

Secara default, $PSStyle.OutputRendering disetel menjadi Host. Urutan escape ANSI dihapus dari output yang dialihkan atau disalurkan.

OutputRendering hanya berlaku untuk penyajian di Host, Out-File, dan Out-String. Keluaran dari eksekusi asli tidak terpengaruh.

PowerShell 7.2.6 mengubah perilaku Out-File dan Out-String untuk skenario berikut:

  • Ketika objek input adalah string murni, cmdlet ini menjaga string tetap tidak berubah terlepas dari pengaturan OutputRendering.
  • Ketika objek input harus memiliki tampilan pemformatan yang diterapkan padanya, cmdlet ini menyimpan atau menghapus urutan escape dari string output pemformatan berdasarkan pengaturan OutputRendering.

Ini adalah perubahan mendasar dalam cmdlet ini dibandingkan dengan PowerShell 7.2.

OutputRendering tidak berlaku untuk output yang dihasilkan oleh proses host PowerShell, misalnya saat Anda menjalankan pwsh dari baris perintah dan mengalihkan output.

Dalam contoh berikut, PowerShell dijalankan di Linux dari bash. Cmdlet Get-ChildItem menghasilkan teks yang dihiasi ANSI. Karena pengalihan terjadi dalam proses bash, di luar host PowerShell, output tidak terpengaruh oleh OutputRendering.

pwsh -NoProfile -Command 'Get-ChildItem' > out.txt

Saat Anda memeriksa isi dari out.txt, Anda melihat rangkaian escape ANSI.

Sebaliknya, ketika pengalihan terjadi dalam sesi PowerShell, OutputRendering memengaruhi output yang dialihkan.

pwsh -NoProfile -Command 'Get-ChildItem > out.txt'

Saat Anda memeriksa konten out.txt tidak ada urutan escape ANSI.

Menonaktifkan output ANSI

Dukungan untuk urutan escape ANSI dapat dinonaktifkan menggunakan variabel lingkungan TERM atau NO_COLOR.

Nilai $Env:TERM berikut mengubah perilaku sebagai berikut:

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

Jika $Env:NO_COLOR ada, maka $PSStyle.OutputRendering diatur ke PlainText. Untuk informasi selengkapnya tentang variabel lingkungan NO_COLOR, lihat https://no-color.org/.

Menggunakan $PSStyle dari C#

Pengembang C# dapat mengakses PSStyle sebagai singleton, seperti yang ditunjukkan dalam contoh berikut:

string output = $"{PSStyle.Instance.Foreground.Red}{PSStyle.Instance.Bold}Hello{PSStyle.Instance.Reset}";

PSStyle ada di namespace System.Management.Automation.

Mesin PowerShell menyertakan perubahan berikut:

  • Sistem pemformatan PowerShell diperbarui untuk menghormati $PSStyle.OutputRendering.
  • Jenis StringDecorated ditambahkan untuk menangani string yang menggunakan pelolosan ANSI.
  • Properti boolean ditambahkan untuk mengembalikan true saat string berisi urutan karakter atau .
  • Properti Length dari string mengembalikan panjang teks tanpa urutan escape ANSI.
  • Metode StringDecorated Substring(int contentLength) mengembalikan substring yang dimulai pada indeks 0 hingga panjang konten yang bukan bagian dari urutan escape ANSI. Ini diperlukan untuk pemformatan tabel untuk memotong string dan mempertahankan urutan escape ANSI yang tidak memakan ruang karakter yang dapat dicetak.
  • Metode string ToString() tetap sama dan mengembalikan versi teks biasa dari string.
  • Metode string ToString(bool Ansi) mengembalikan string tersemat ANSI mentah jika parameter Ansi bernilai true. Jika tidak, versi dalam teks biasa yang sudah dihapus urutan escape ANSI menjadi hasilnya.
  • Metode FormatHyperlink(string text, uri link) mengembalikan string yang berisi urutan escape ANSI yang digunakan untuk menghias hyperlink. Beberapa host terminal, seperti Windows Terminal, mendukung markup ini, yang membuat teks yang dirender dapat diklik di terminal.

Metode statis kelas PSStyle

PowerShell 7.4 menambahkan tiga metode statis baru ke kelas [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)

Metode ini menyediakan cara untuk mengonversi nilai ConsoleColor ke urutan escape ANSI untuk warna latar depan dan latar belakang atau untuk kombinasi keduanya.

Contoh berikut menunjukkan urutan escape ANSI yang dihasilkan oleh metode ini.

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

Lihat juga