PSReadLine hakkında


Kısa Açıklama

PSReadLine, PowerShell konsolunda gelişmiş bir komut satırı düzenleme deneyimi sağlar.

Uzun Açıklama

PowerShell 7.4, PSReadLine 2.3.4 ile birlikte gelir. Geçerli sürüm PSReadLine 2.3.4'tür. PSReadLine'ın güncel sürümü Windows PowerShell 5.1 ve daha yeni sürümlere yüklenebilir ve kullanılabilir. Bazı özellikler için PowerShell 7.2 veya üstünü çalıştırmanız gerekir.

PSReadLine, PowerShell konsolu için güçlü bir komut satırı düzenleme deneyimi sağlar. Şunları sağlar:

  • Komut satırının söz dizimi renklendirmesi
  • Sözdizimi hatalarının görsel bir göstergesi
  • Daha iyi bir çok satırlı deneyim (hem düzenleme hem de geçmiş)
  • Özelleştirilebilir tuş bağlamaları
  • Cmd ve Emacs modları
  • Birçok yapılandırma seçeneği
  • Bash stili tamamlama (Cmd modunda isteğe bağlı, Emacs modunda varsayılan)
  • Emacs çekme/sonlandırma halkası
  • PowerShell belirteci tabanlı "kelime" hareketi ve silinmesi
  • Tahmine Dayalı IntelliSense
  • Komut satırındaki yerinizi kaybetmeden Yardım'ın konsolda dinamik olarak görüntülenmesi

PSReadLine, PowerShell 5,1 veya daha yenisini gerektirir. PSReadLine, varsayılan Windows konsolu ana bilgisayarı, Windows Terminali ve Visual Studio Code ile çalışır. Windows PowerShell ISE'de çalışmaz.

PSReadLine PowerShell Galerisinden yüklenebilir. PSReadLine'ı desteklenen bir PowerShell sürümüne yüklemek için aşağıdaki komutu çalıştırın.

Install-Module -Name PSReadLine -AllowClobber -Force

Not

PowerShell 7.0'dan itibaren PowerShell, bir ekran okuyucu programı algılanırsa Windows'ta PSReadLine'ın otomatik olarak yüklenmesini atlar. Şu anda PSReadLine ekran okuyucularla iyi çalışmıyor. Windows'ta PowerShell 7,0'ın varsayılan işlemesi ve biçimlendirmesi düzgün çalışıyor. Gerekirse modülü manuel olarak yükleyebilirsiniz.

Tahmine Dayalı IntelliSense

Tahmine Dayalı IntelliSense, kullanıcının komutları başarılı bir şekilde tamamlamasına yardımcı olan sekme tamamlama kavramına eklenen bir özelliktir. Kullanıcıların, kullanıcı geçmişinden ve ek alana özel eklentilerden gelen eşleşen tahminlere dayalı olarak tam komutları keşfetmesine, düzenlemesine ve yürütmesine olanak tanır.

Tahmine Dayalı IntelliSense'i Etkinleştir

Tahmine Dayalı IntelliSense varsayılan olarak devre dışıdır. Tahminleri etkinleştirmek için aşağıdaki komutu çalıştırmanız yeterlidir:

Set-PSReadLineOption -PredictionSource History

PredictionSource parametresi, alana özel ve özel gereksinimler için eklentileri de kabul edebilir.

Predictive IntelliSense'i devre dışı bırakmak için şunu çalıştırın:

Set-PSReadLineOption -PredictionSource None

Not

Predictive IntelliSense, PSReadLine 2.2.6'da varsayılan olarak etkindir. Daha fazla bilgi için aşağıdaki Notlar bölümündeki PSReadLine sürüm geçmişine bakın.

Özel Anahtar Bağlamaları

PSReadLine, Set-PSReadLineKeyHandler cmdlet'ini kullanarak özel anahtar bağlamaları destekler. Çoğu özel tuş ataması, bağlanabilir işlevlerden birini çağırır; örneğin

Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward

Bir ScriptBlock'u bir anahtara bağlayabilirsiniz. ScriptBlock istediğiniz hemen hemen her şeyi yapabilir. Bazı yararlı örnekler şunları içerir:

  • komut satırını düzenle
  • yeni bir pencere açma (örneğin, yardım)
  • komut satırını değiştirmeden dizinleri değiştirin

ScriptBlock iki argüman alır:

  • $key - Özel bağlamayı tetikleyen anahtar olan bir [ConsoleKeyInfo] nesnesi. Aynı ScriptBlock'u birden fazla anahtara bağlarsanız ve anahtara bağlı olarak farklı eylemler gerçekleştirmeniz gerekiyorsa $key seçeneğini işaretleyebilirsiniz. Birçok özel bağlama bu bağımsız değişkeni göz ardı eder.

  • $arg - Rasgele bir argüman. Çoğu zaman bu, kullanıcının DigitArgument anahtar bağlamalarından ilettiği bir tamsayı argümanı olur. Bağlamanız argümanları kabul etmiyorsa, bu argümanı göz ardı etmek mantıklıdır.

Çalıştırmadan geçmişe komut satırı ekleyen bir örneğe bakalım. Bu, bir şeyi yapmayı unuttuğunuzu fark ettiğinizde ancak önceden girmiş olduğunuz komut satırına yeniden girmek istemediğinizde kullanışlıdır.

$parameters = @{
    Key = 'Alt+w'
    BriefDescription = 'SaveInHistory'
    LongDescription = 'Save current line in history but do not execute'
    ScriptBlock = {
      param($key, $arg)   # The arguments are ignored in this example

      # GetBufferState gives us the command line (with the cursor position)
      $line = $null
      $cursor = $null
      [Microsoft.PowerShell.PSConsoleReadLine]::GetBufferState([ref]$line,
        [ref]$cursor)

      # AddToHistory saves the line in history, but does not execute it.
      [Microsoft.PowerShell.PSConsoleReadLine]::AddToHistory($line)

      # RevertLine is like pressing Escape.
      [Microsoft.PowerShell.PSConsoleReadLine]::RevertLine()
  }
}
Set-PSReadLineKeyHandler @parameters

PSReadLine modül klasörüne yüklenen SamplePSReadLineProfile.ps1 dosyasında çok daha fazla örnek görebilirsiniz.

Çoğu tuş ataması, komut satırını düzenlemek için bazı yardımcı işlevleri kullanır. Bu API'ler about_PSReadLine_Functions'da belgelenmiştir.

Notlar

Komut Geçmişi

PSReadLine, komut satırından girdiğiniz tüm komutları ve verileri içeren bir geçmiş dosyası tutar. Geçmiş dosyaları $ ($host.Name)_history.txt adlı bir dosyadır. Windows sistemlerinde geçmiş dosyası $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine konumunda depolanır. Windows olmayan sistemlerde, geçmiş dosyaları $env:XDG_DATA_HOME/powershell/PSReadLine veya $env:HOME/.local/share/powershell/PSReadLine konumunda depolanır.

Geçmiş, şifreler dahil hassas veriler içerebilir. PSReadLine hassas bilgileri filtrelemeye çalışır. Aşağıdaki dizeleri içeren komut satırları geçmiş dosyasına yazılmaz.

    password
    asplaintext
    token
    apikey
    secret

PSReadLine 2.2.0, hassas verilerin filtrelenmesini iyileştirir

  • Hassas verileri aramak için ayrıştırılan komut satırının PowerShell Soyut Sözdizimi Ağacını (AST) kullanır.
  • Bu komutların geçmişe eklenmesine izin vermek için SecretManagement modülündeki güvenli cmdlet'lerin izin verilenler listesini kullanır. İzin verilenler listesi şunları içerir:

      Get-Secret
      Get-SecretInfo
      Get-SecretVault
      Register-SecretVault
      Remove-Secret
      Set-SecretInfo
      Set-SecretVaultDefault
      Test-SecretVault
      Unlock-SecretVault
      Unregister-SecretVault

Örneğin, aşağıdaki komutların geçmiş dosyasına yazılmasına izin verilir:

Get-Secret PSGalleryApiKey -AsPlainText # Get-Secret is in the allowlist
$token = Get-Secret -Name github-token -Vault MySecret
[MyType]::CallRestAPI($token, $url, $args)
$template -f $token

Aşağıdaki komutlar geçmiş dosyasına yazılamıyor:

$token = 'abcd' # Assign expr-value to sensitive variable name.
Set-Secret abc $mySecret # Set-Secret is not in the allowlist.
ConvertTo-SecureString stringValue -AsPlainText # '-AsPlainText' is an alert.
Invoke-WebRequest -Token xxx # Expr-value as argument to '-Token'.
Get-ResultFromTwo -Secret1 (Get-Secret -Name blah -AsPlainText) -Secret2 sdv87ysdfayf798hfasd8f7ha # '-Secret2' has expr-value argument.

Geçmiş dosyalarına yazılmasını istemediğiniz başka komutlar varsa Set-PSReadLineOption cmdlet'inin AddToHistoryHandler parametresini kullanabilirsiniz. AddToHistoryHandler'ın nasıl kullanılacağına ilişkin bir örnek için Set-PSReadLineOption örneğinin 7. örneğine bakın.

PSReadLine 2.3.4 hassas verilerin filtrelenmesini iyileştiriyor

Geçmişin güvenli mülk erişimini içermesine izin vermek için varsayılan hassas geçmiş temizleme iyileştirildi.

Hassas dize bir mülk erişiminin parçası olduğunda:

  • Bu üye erişim işlemi bir atamanın parçası değilse, bunun güvenli olduğunu düşünüyoruz
  • Aksi takdirde sağ taraf bir boru hattı veya değişken ise onu da güvenli kabul ederiz.

Örneğin aşağıdaki kullanım durumları güvenli kabul edilir ve geçmişe kaydedilebilir.

$a.Secret = Get-Secret -Name github-token -Vault MySecret
$a.Secret = $secret
$a.Password.Secret | Set-Value
$token = (Get-AzAccessToken -ResourceUrl 'https://app.contoso.com').Token

Sürüm aynı zamanda az, gcloud ve kubectl komut satırı araçlarını kullanarak jeton almaya olanak sağlayacak şekilde hassas geçmiş temizlemeyi de iyileştirdi.

Örneğin aşağıdaki kullanım durumları güvenli kabul edilir ve geçmişe kaydedilebilir.

kubectl get secrets
kubectl get secret db-user-pass -o jsonpath='{.data.password}' | base64 --decode
kubectl describe secret db-user-pass
az account get-access-token --resource=https://app.contoso.com --query accessToken --output tsv
$env:PGPASS = gcloud auth print-access-token

PSReadLine sürüm geçmişi

Windows PowerShell 5.1'de gelen sürümden bu yana PSReadLine'da birçok güncelleme yapıldı.

  • Mevcut sürüm PSReadLine 2.3.4'tür
  • PowerShell 7.4, PSReadLine 2.3.4 ile birlikte gelir
  • PowerShell 7.3, PSReadLine 2.2.6 ile birlikte gelir
  • PowerShell 7.2, PSReadLine 2.1.0 ile birlikte gelir
  • PowerShell 7.0.11, PSReadLine 2.0.4 ile birlikte gönderilir
  • PowerShell 5.1, PSReadLine 2.0.0 ile birlikte gelir

Değişikliklerin tam listesi için PSReadLine ChangeLog'a bakın.

  • PSReadLine 2.3.4

Çeşitli hata düzeltmelerine ek olarak bu sürüm aşağıdaki geliştirmeleri içerir:

  • Tahmine Dayalı IntelliSense için Kaydırılabilir ListView

    • Terminal penceresinin boyutuna göre boyutu otomatik olarak ayarlar
    • En fazla 50 tahmin sonucu içerebilir
    • Sonuçların sayısını ve mevcut tahmin kaynağını gösteren dinamik liste başlığı
  • az, gcloud ve kubectl'den jeton alınmasına izin verecek şekilde geliştirilmiş hassas geçmiş temizleme

  • Güvenli mülk erişimine izin vermek için varsayılan hassas geçmiş temizlemeyi iyileştirin

  • Kelimelerin büyütülmesi, küçültülmesi ve büyük harflerle yazılması için destek eklendi

  • Sekme tamamlamanın ListItemText'i yalnızca büyük/küçük harfe göre farklı olan sonuçları göstermesini sağlayın

  • VI düzenleme modunda <d,i,w> metin nesnesi komutunu destekler

  • Satır içi tahminin varsayılan rengini soluk olarak değiştirin

  • Alt+x ile Unicode kod noktasını Unicode karaktere dönüştürmek için README'ye bir örnek ekleyin

  • Konsol girişinden okumayı zorlaştırabilecek artık konsola bağlı işlemi ortadan kaldırmak için Windows'a TerminateOrphanedConsoleApps seçeneğini ekleyin

  • PSReadLine 2.2.6

    Bu sürümde, Predictive IntelliSense özelliği aşağıdaki koşullara bağlı olarak varsayılan olarak etkindir:

    • Sanal Terminal (VT) destekleniyorsa ve PSReadLine PowerShell 7,2 veya üzeri sürümde çalışıyorsa PredictionSource, HistoryAndPlugin olarak ayarlanır.
    • VT destekleniyorsa ve PSReadLine 7.2'den önce PowerShell'de çalışıyorsa PredictionSource, History olarak ayarlanır.
    • VT desteklenmiyorsa PredictionSource, Yok olarak ayarlanır
  • PSReadLine 2.2.5

    Küçük hata düzeltmeleri içeren resmi hizmet sürümü.

  • PSReadLine 2.2.2

    • PSReadLine iki yeni tahmine dayalı IntelliSense özelliği ekledi:

      • Yeni ListView seçimine izin vermek için PredictionViewStyle parametresi eklendi.
      • Kullanıcının özel bir kaynaktan önerileri işleyebilecek bir tahmin modülünü içe aktarabilmesine olanak sağlamak için PSReadLine, PowerShell 7,2'de sunulan CommandPrediction API'lerine bağlandı.
    • Dinamik yardım için Microsoft.PowerShell.Pager'ın 1.0.0 sürümünü kullanacak şekilde güncellendi
    • Hassas geçmiş öğelerinin temizlenmesi iyileştirildi
    • Çok sayıda hata düzeltmesi ve daha küçük iyileştirmeler
  • PSReadLine 2.1.0

    Bu sürüm, 2.0.4 sürümünden bu yana eklenen aşağıdaki geliştirmeleri özetlemektedir:

    • Komut geçmişinden Tahmine Dayalı IntelliSense önerileri ekleyin
    • Birçok hata düzeltmesi ve API geliştirmesi
  • PSReadLine 2.0.4

    Bu sürüm, 2.0.0 sürümünden bu yana eklenen aşağıdaki geliştirmeleri özetlemektedir:

    • Belirli tuş atamalarının aranmasına izin vermek için -Chord parametresi Get-PSReadLineKeyHandler'a eklendi

Geri bildirim ve PSReadLine'a katkıda bulunma

GitHub'da PSReadLine

GitHub sayfasında bir çekme isteği göndermekten veya geri bildirim göndermekten çekinmeyin.

Ayrıca Bakınız

  • PSReadLine, GNU okuma satırı kitaplığından büyük ölçüde etkilenmiştir.

İlgili makaleler