Aracılığıyla paylaş


about_ANSI_Terminals

Kısa açıklama

PowerShell'de ANSI kaçış dizileri için sağlanan desteği açıklar.

Uzun açıklama

PowerShell, PowerShell'i barındıran terminal uygulamasında çıkışın işlenmesini denetlemek için ANSI kaçış dizilerinin kullanımını destekleyen birçok özelliğe sahiptir.

PowerShell 7.2, $PSStyleyeni bir otomatik değişken ekledi ve ANSI ile dekore edilmiş metnin çıkışını desteklemek için PowerShell altyapısında değişiklik yaptı.

ANSI Terminal desteği

ANSI özellikleri, xterm tabanlı terminallerle uyumlu olacak şekilde tasarlanmıştır. Daha fazla bilgi için Wikipedia'da xterm bölümüne bakın.

Windows 10 ve üzeri sürümlerde Windows Konsol Konağı xterm ile uyumludur. Windows Terminal uygulaması da xterm uyumludur.

macOS'ta varsayılan terminal uygulaması xterm ile uyumludur.

Linux için her dağıtım farklı bir terminal uygulamasıyla birlikte gönderilir. Uygun bir terminal uygulaması bulmak için dağıtımınız için belgelere bakın.

$PSStyle

Değişken aşağıdaki özelliklere sahiptir:

  • Sıfırlama - Tüm süslemeleri kapatır
  • Yanıp Sönme - Yanıp Sönme'yi açar
  • BlinkOff - Yanıp Sönme kapatılır
  • Kalın - Kalın'ı açar
  • - Kalın yazı kapatılır
  • Dim - Dim'i açar (PowerShell 7.4'te eklenir)
  • DimOff - Dim'i kapatır (PowerShell 7.4'te eklenir)
  • Gizli - Gizli'yi açar
  • HiddenOff - Gizli mod kapatılır
  • Ters - Ters Çevir'i açar
  • ters - Ters Çevir'i kapatır
  • italik - Italik'i açar
  • ItalicOff - italik'i kapatır
  • Alt Çizgi - Altı çiziliyi açar
  • UnderlineOff - Altı çizili kapatır
  • Üstü Çizili - Üstü çiziliyi etkinleştirir
  • StrikethroughOff - Üstü kapalı olur
  • OutputRendering - Çıktı işlemenin ne zaman kullanıldığını denetleme
  • Biçimlendirme - Çıkış akışları için varsayılan biçimlendirmeyi denetleen iç içe nesne
  • İlerleme - İlerleme çubuklarının işlenmesini denetleen iç içe nesne
  • FileInfo - FileInfo nesnelerinin renklendirmesini denetlemek için iç içe nesne.
  • Ön Plan - Ön plan renklendirmesini denetlemek için iç içe nesne
  • Arka Plan - Arka plan renklendirmesini kontrol etmek için iç içe nesne

Temel üyeler, adlarına eşlenmiş ANSI kaçış dizelerini döndürür. Değerler özelleştirmeye izin verecek şekilde ayarlanabilir. Örneğin, kalın değerini altı çizili olarak değiştirebilirsiniz. Özellik adları, sekme tamamlama özelliğini kullanarak süslü dizeler oluşturmanızı kolaylaştırır:

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

Aşağıdaki üyeler ANSI biçimlendirmesinin nasıl veya ne zaman kullanılacağını denetler:

  • $PSStyle.OutputRendering, değerleri içeren bir System.Management.Automation.OutputRendering sabit listesidir:

    • ANSI: ANSI kaçış sıraları her zaman as-isüzerinden geçirilir.

      Önemli

      Çıkışı aşağı akışla yürütülmesi amaçlanan bir dosyaya veya işlem hattına yeniden yönlendirirken ANSI modunu kullanmanız gerekir. Bu, çıkışın değiştirilmemesini sağlar. Başka bir modun kullanılması ANSI kaçış dizilerini kaldırarak çıkışı değiştirir ve bu da yürütme davranışını değiştirebilir.

    • PlainText: ANSI kaçış dizileri her zaman yalnızca düz metin olacak şekilde çıkarılır. Uzak oturumlarda, uzak ana bilgisayar PlainTextolarak ayarlanırsa çıkış, yerel istemciye geri gönderilmeden önce ANSI kaçış dizilerinden çıkarılır.

    • Host: Bu varsayılan davranıştır. ANSI kaçış dizileri yeniden yönlendirilen veya kanallı çıkıştan kaldırılır. Daha fazla bilgi için bkz. Çıktıyı yeniden yönlendirme.

  • $PSStyle.Background ve $PSStyle.Foreground üyeleri, 16 standart konsol rengi için ANSI kaçış dizilerini içeren dizelerdir.

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

    Değerler ayarlanabilir ve herhangi bir sayıda ANSI kaçış dizisi içerebilir. 24 bit renk belirtmek için bir FromRgb() yöntemi de vardır. FromRgb() yöntemini çağırmanın iki yolu vardır.

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

    Aşağıdaki örneklerden biri arka plan rengini 24 bit renk Beigeolarak ayarlar.

    $PSStyle.Background.FromRgb(245, 245, 220)
    $PSStyle.Background.FromRgb(0xf5f5dc)
    
  • $PSStyle.Formatting, hata ayıklama, hata, ayrıntılı ve uyarı iletilerinin varsayılan biçimlendirmesini ve liste ile tablo üst bilgilerini denetlemek için yerleşik bir nesnedir. Kalın ve altı çizili gibi öznitelikleri de de denetleyebilirsiniz. Biçimlendirme işlemesinde renkleri yönetme yöntemi olarak $Host.PrivateData yerine geçer. $Host.PrivateData geriye dönük uyumluluk için varolmaya devam eder ancak $PSStyle.Formattingbağlı değildir. $PSStyle.Formatting aşağıdaki üyelere sahiptir:

    • FormatAccent - liste öğeleri için biçimlendirme
    • ErrorAccent - hata meta verileri için biçimlendirme
    • Hata - hata iletileri için biçimlendirme
    • Uyarı - uyarı iletileri için biçimlendirme
    • Ayrıntılı - ayrıntılı mesajlar için biçimlendirme
    • hata ayıklama - hata ayıklama iletileri için biçimlendirme
    • TableHeader - tablo üst bilgileri için biçimlendirme
    • CustomTableHeaderLabel - nesne üzerinde gerçekte özellik olmayan tablo üst bilgileri için biçimlendirme
    • FeedbackName - geri bildirim sağlayıcısı adı için biçimlendirme (PowerShell 7.4'te deneysel bir özellik olarak eklenir)
    • FeedbackText - geri bildirim iletileri için biçimlendirme (PowerShell 7.4'te deneysel bir özellik olarak eklenir)
    • FeedbackAction - geri bildirim sağlayıcısı tarafından önerilen eylemler için biçimlendirme (PowerShell 7.4'te deneysel bir özellik olarak eklenir)
  • $PSStyle.Progress, ilerleme çubuğu görünümü işlemeyi denetlemenize olanak tanır.

    • Stil - İşleme stilini belirleyen bir ANSI dizesi.
    • MaxWidth - Görünümün en büyük genişliğini ayarlar. varsayılan olarak 120. En düşük değer 18'dir.
    • Görünüm - değerleri, Minimal ve Classiciçeren bir sabit listesi. Classic, değişiklik olmadan var olan işlemedir. Minimal tek satırlı minimal bir görüntülemedir. Minimal varsayılan değerdir.
    • UseOSCIndicator - Varsayılan olarak $falseşeklinde ayarlanır. Bunu OSC göstergelerini destekleyen terminaller için $true olarak ayarlayın.

    Not

    Konak Sanal Terminal'i desteklemiyorsa, $PSStyle.Progress.View otomatik olarak Classicolarak ayarlanır.

    Aşağıdaki örnek, işleme stilini en düşük ilerleme çubuğuna ayarlar.

    $PSStyle.Progress.View = 'Minimal'
    
  • $PSStyle.FileInfo, FileInfo nesnelerinin renklendirmesini denetlemek için iç içe geçmiş bir nesnedir.

    • Dizin - Dizinler için renk belirleyen yerleşik fonksiyon

    • SymbolicLink - Sembolik bağlantıların rengini belirtmek için yerleşik üye

    • Yürütülebilir - Yürütülebilir dosyaların rengini belirtmek için yerleşik özellik.

    • Uzantısı - Farklı dosya uzantılarının renklerini tanımlamak için bu üyeyi kullanın. Uzantı üyesi, arşiv ve PowerShell dosya uzantıları için renkleri önceden tanımlı olarak ayarlar.

      Aşağıdaki örnekte, çeşitli FileInfo ayarlar ve belirli dosya uzantıları için renklerin nasıl değiştireceği gösterilmektedir. Renkler, açık terminal arka planında iyi çalışacak şekilde seçilir.

      $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
      

ANSI çıkışı oluşturan cmdlet'ler

  • Markdown cmdlet'leri - Show-Markdown cmdlet'i, markdown metni içeren bir dosyanın içeriğini görüntüler. Çıkış, farklı stilleri temsil etmek için ANSI dizileri kullanılarak işlenir. Get-MarkdownOption ve Set-MarkdownOption cmdlet'lerini kullanarak stillerin tanımlarını yönetebilirsiniz.
  • PSReadLine cmdlet'leri - PSReadLine modülü, komut satırındaKi PowerShell söz dizimi öğelerini renklendirmek için ANSI dizilerini kullanır. Renkler Get-PSReadLineOption ve Set-PSReadLineOptionkullanılarak yönetilebilir.
  • Get-Error - Hata Al cmdlet'i, okunmasını kolaylaştırmak için biçimlendirilmiş Hata nesnesinin ayrıntılı bir görünümünü döndürür.
  • Select-String - PowerShell 7.0'dan itibaren, Select-String çıkıştaki eşleşen desenleri vurgulamak için ANSI dizilerini kullanır.
  • Write-Progress - ANSI çıkışı, yukarıda açıklandığı gibi $PSStyle.Progresskullanılarak yönetilir. Daha fazla bilgi için bkz. Yazma İlerlemesi

Ana Bilgisayar modunda çıkışı yeniden yönlendirme

Varsayılan olarak, $PSStyle.OutputRenderingAna Bilgisayarolarak ayarlanmıştır. ANSI kaçış dizileri yeniden yönlendirilen veya kanallı çıkıştan kaldırılır.

OutputRendering yalnızca Konak, Out-Fileve Out-Stringişleme için geçerlidir. Yerel yürütülebilir dosyalardan alınan çıkış etkilenmez.

PowerShell 7.2.6, aşağıdaki senaryolar için Out-File ve Out-String davranışını değiştirdi:

  • Giriş nesnesi saf dize olduğunda, bu cmdlet'ler OutputRendering ayarından bağımsız olarak dizeyi değiştirmeden tutar.
  • Giriş nesnesine bir biçimlendirme görünümü uygulanması gerektiğinde, bu cmdlet'ler çıktının biçimlendirilmiş dize dizileri üzerinde OutputRendering ayarına göre kaçış dizilerini tutar veya kaldırır.

PowerShell 7.2 ile karşılaştırıldığında, bu cmdlet'lerde önemli bir değişikliktir.

OutputRendering, PowerShell ana bilgisayar işlemi tarafından üretilen çıktılara uygulanmaz; örneğin, bir komut satırından pwsh'yi çalıştırıp çıktıyı yönlendirdiğinizde.

Aşağıdaki örnekte PowerShell, bash'den Linux üzerinde çalıştırılır. Get-ChildItem cmdlet'i ANSI ile dekore edilmiş metin oluşturur. Yeniden yönlendirme bash işleminde, PowerShell konağı dışında gerçekleştiğinden, çıktı OutputRenderingtarafından etkilenmez.

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

out.txt içeriğini incelediğinizde ANSI kaçış dizilerini görürsünüz.

Buna karşılık, PowerShell oturumunda yeniden yönlendirme gerçekleştiğinde, OutputRendering yeniden yönlendirilen çıkışı etkiler.

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

out.txt içeriğini incelediğinizde, ANSI kaçış dizileri bulunmaz.

ANSI çıktısını devre dışı bırakma

ANSI kaçış dizileri desteği, TERM veya NO_COLOR ortam değişkenleri kullanılarak kapatılabilir.

Aşağıdaki $Env:TERM değerleri davranışı aşağıdaki gibi değiştirir:

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

varsa, Düz Metinolarak ayarlanır. NO_COLOR ortam değişkeni hakkında daha fazla bilgi için bkz. https://no-color.org/.

C'den kullanma $PSStyle #

C# geliştiricileri, aşağıdaki örnekte gösterildiği gibi PSStyle'a bir singleton olarak erişebilir.

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

PSStyle System.Management.Automation ad alanında bulunur.

PowerShell altyapısı aşağıdaki değişiklikleri içerir:

  • PowerShell biçimlendirme sistemi, $PSStyle.OutputRenderingdikkate almak için güncelleştirilir.
  • ANSI kaçış dizelerini işlemek amacıyla StringDecorated türü eklenmiştir.
  • string IsDecorated boole özelliği, dize veya ESC karakter dizilerini içerdiğinde C1 CSI true döndürmek için eklendi.
  • Bir dizenin Length özelliği, ANSI kaçış dizileri olmadan metnin uzunluğunu döndürür.
  • StringDecorated Substring(int contentLength) yöntemi, dizin 0'dan başlayarak ANSI kaçış dizilerinin parçası olmayan içeriğin uzunluğuna kadar bir alt dize döndürür. Bu, dizeleri kesmeye ve yazdırılabilir karakter alanı kaplamayan ANSI kaçış dizilerini korumaya yönelik tablo biçimlendirmesi için gereklidir.
  • string ToString() yöntemi aynı kalır ve dizenin düz metin sürümünü döndürür.
  • yöntemi, parametresi trueise ham ANSI katıştırılmış dizesini döndürür. Aksi takdirde, ANSI kaçış dizileri kaldırılmış bir düz metin sürümü döndürülür.
  • FormatHyperlink(string text, uri link) metodu, köprüleri süslemek için kullanılan ANSI kaçış dizilerini içeren bir dize döndürür. Windows Terminaligibi bazı terminal konakları, işlenen metni terminalde tıklanabilir hale getiren bu işaretlemeyi destekler.

PSStyle sınıfının statik yöntemleri

PowerShell 7.4, [System.Management.Automation.PSStyle] sınıfına üç yeni statik yöntem ekler.

[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)

Bu yöntemler, ConsoleColor değerlerini ön plan ve arka plan renkleri için veya her ikisinin birleşimi için ANSI kaçış sıralarına dönüştürmenin bir yolunu sağlar.

Aşağıdaki örneklerde bu yöntemler tarafından üretilen ANSI kaçış dizileri gösterilmektedir.

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

Ayrıca bakınız