about_PSReadLine

Kısa Açıklama

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

Uzun Açıklama

PowerShell 7.3, PSReadLine 2.2.6 ile birlikte gösterilir. Geçerli sürüm PSReadLine 2.3.4'dür. PSReadLine'ın geçerli sürümü Windows PowerShell 5.1 ve daha yeni sürümlerde yüklenebilir ve kullanılabilir. Bazı özellikler için PowerShell 7.2 veya üzerini çalıştırıyor olmanı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öz dizimi hatalarının görsel göstergesi
  • Daha iyi bir çok satırlı deneyim (hem düzenleme hem de geçmiş)
  • Özelleştirilebilir anahtar 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 yank/kill-ring
  • PowerShell belirteci tabanlı "sözcük" taşıma ve silme
  • Tahmine Dayalı IntelliSense
  • Komut satırındaki yerinizi kaybetmeden konsolunda Yardım'ın dinamik görüntüsü

PSReadLine için PowerShell 5.1 veya daha yeni bir sürüm gerekir. PSReadLine varsayılan Windows konsol konağı, Windows Terminali ve Visual Studio Code ile çalışır. Windows PowerShell ISE'de çalışmaz.

PSReadLine PowerShell Galerisi yüklenebilir. PSReadLine'ı PowerShell'in desteklenen bir 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 sürümünden itibaren, bir ekran okuyucu programı algılanırsa PowerShell, Windows'ta PSReadLine'ı otomatik yüklemeyi atlar. Şu anda PSReadLine, ekran okuyucularla iyi çalışmıyor. Windows'ta PowerShell 7.0'ın varsayılan işleme ve biçimlendirmesi düzgün çalışır. Gerekirse modülü el ile yükleyebilirsiniz.

Tahmine Dayalı IntelliSense

Tahmine dayalı IntelliSense, kullanıcının komutları başarıyla tamamlamasına yardımcı olan sekme tamamlama kavramına bir ektir. Kullanıcıların, kullanıcının geçmişinden ve ek etki alanına özgü eklentilerden gelen eşleşen tahminlere göre tam komutları bulmasına, düzenlemesine ve yürütmesine olanak tanır.

Tahmine Dayalı IntelliSense'i etkinleştirme

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

Set-PSReadLineOption -PredictionSource History

PredictionSource parametresi, etki alanına özgü ve özel gereksinimler için eklentileri de kabul edebilir.

Tahmine Dayalı IntelliSense'i devre dışı bırakmak için şunu çalıştırmanız gerekir:

Set-PSReadLineOption -PredictionSource None

Not

PSReadLine 2.2.6'da tahmine dayalı IntelliSense 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, cmdlet'ini Set-PSReadLineKeyHandler kullanarak özel anahtar bağlamalarını destekler. Çoğu özel anahtar bağlaması bağlanabilir işlevlerden birini çağırır, örneğin

Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward

ScriptBlock'ı bir anahtara bağlayabilirsiniz. ScriptBlock istediğiniz her şeyi yapabilir. Bazı yararlı örnekler şunlardır:

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

ScriptBlock iki bağımsız değişken alır:

  • $key- Özel bağlamayı tetikleyen anahtar olan [ConsoleKeyInfo] nesnesi. Aynı ScriptBlock'ı birden çok anahtara bağlarsanız ve anahtara bağlı olarak farklı eylemler gerçekleştirmeniz gerekiyorsa, öğesini de kontrol $keyedebilirsiniz. Birçok özel bağlama bu bağımsız değişkeni yoksayar.

  • $arg - Rastgele bir bağımsız değişken. Çoğu zaman bu, kullanıcının DigitArgument anahtar bağlamalarından geçirdiği bir tamsayı bağımsız değişkeni olacaktır. Bağlamanız bağımsız değişkenleri kabul etmiyorsa, bu bağımsız değişkeni yoksaymak mantıklıdır.

Şimdi yürütmeden geçmişe komut satırı ekleyen bir örneğe göz atalım. Bu, bir şey yapmayı unuttuğunu ancak daha önce girdiğiniz komut satırını yeniden girmek istemediğinizi fark ettiğ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ünde yüklü olan dosyasında SamplePSReadLineProfile.ps1daha birçok örnek görebilirsiniz.

Çoğu anahtar bağlaması, komut satırını düzenlemek için bazı yardımcı işlevler kullanır. Bu API'ler about_PSReadLine_Functions 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ı adlı $($host.Name)_history.txtbir dosyadır. Windows sistemlerinde geçmiş dosyası konumunda $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLinedepolanır. Windows olmayan sistemlerde, geçmiş dosyaları veya $env:HOME/.local/share/powershell/PSReadLinekonumunda $env:XDG_DATA_HOME/powershell/PSReadLine depolanır.

Geçmiş, parolalar da dahil olmak üzere hassas veriler içerebilir. PSReadLine hassas bilgileri filtrelemeyi dener. Aşağıdaki dizeleri içeren komut satırları geçmiş dosyasına yazılamaz.

  • password
  • asplaintext
  • token
  • apikey
  • secret

PSReadLine 2.2.0 hassas verilerin filtrelenmesinde iyileştirmeler

  • Hassas verileri aramak için ayrıştırılan komut satırının PowerShell Soyut Söz Dizimi 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ılmı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, cmdlet'in Set-PSReadLineOption AddToHistoryHandler parametresini kullanabilirsiniz. AddToHistoryHandler'ın nasıl kullanılacağına ilişkin bir örnek için bkz. Set-PSReadLineOption Örneği 7.

PSReadLine 2.3.4, hassas verilerin filtrelenmesinde iyileştirmeler sağlar

Geçmişin güvenli özellik erişimi içermesine izin vermek için varsayılan hassas geçmiş temizleme geliştirildi.

Hassas dize bir özellik erişiminin parçası olduğunda:

  • Bu üye erişim işlemi bir atamanın parçası değilse bunu güvenli olarak değerlendiririz
  • Aksi takdirde, sağ taraf bir işlem hattı veya değişkense, bunu güvenli olarak da değerlendiririz

Örneğin, aşağıdaki kullanım örnekleri güvenli olarak 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 ayrıca, , gcloudve kubectl komut satırı araçlarını kullanarak belirtecin alınmasına izin vermek için hassas geçmiş temizlemeyi azgeliştirdi.

Örneğin, aşağıdaki kullanım örnekleri güvenli olarak 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üncelleştirme yapılmıştır.

  • Geçerli sürüm PSReadLine 2.3.4
  • PowerShell 7.4, PSReadLine 2.3.4 ile birlikte geldi
  • PowerShell 7.3, PSReadLine 2.2.6 ile birlikte geldi
  • PowerShell 7.2, PSReadLine 2.1.0 ile birlikte geldi
  • POWERShell 7.0.11, PSReadLine 2.0.4 ile birlikte gönderildi
  • PowerShell 5.1, PSReadLine 2.0.0 ile birlikte geldi

Değişikliklerin tam listesi için bkz. PSReadLine ChangeLog.

  • PSReadLine 2.3.4

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

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

    • Boyutu terminal penceresinin boyutuna göre otomatik olarak ayarlama
    • En fazla 50 tahmin sonucu içerebilir
    • Sonuçların sayısını ve geçerli tahmin kaynağını gösteren dinamik liste üst bilgisi
  • , gcloudve kaynaklarından azbelirteç alınmasına izin vermek için geliştirilmiş hassas geçmiş temizlemekubectl

  • Güvenli özellik erişimine izin vermek için varsayılan hassas geçmiş temizlemeyi geliştirme

  • Sözcükleri büyük harfe çevirme, küçültme ve büyük harfe çevirme desteği eklendi

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

  • VI düzenleme modunda text-object komutunu <d,i,w> destekler

  • Satır içi tahmin için varsayılan rengi soluk olarak değiştirme

  • Unicode kod noktasını Unicode karakterine dönüştürmek için README'ye örnek ekleme Alt+x

  • Konsol girişinden okumayı bozabilecek yalnız bırakılmış konsola bağlı işlemi sonlandırmak için Windows'da TerminateOrphanedConsoleApps seçeneğini ekleyin

  • PSReadLine 2.2.6

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

    • Sanal Terminal (VT) destekleniyorsa ve PowerShell 7.2 veya sonraki bir sürümde çalışan PSReadLine varsa, PredictionSource olarak ayarlanır HistoryAndPlugin
    • VT destekleniyorsa ve PsReadLine 7.2'den önce PowerShell'de çalışıyorsa PredictionSource History
    • VT desteklenmiyorsa PredictionSource şu şekilde ayarlanır: None
  • 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öğesinin seçilmesine izin vermek için PredictionViewStyle parametresi eklendi.
      • psreadline CommandPrediction Bağlan PowerShell 7.2'de kullanıma sunulan API'ler, kullanıcının özel bir kaynaktan gelen önerileri işleyebilen bir tahmin modülünü içeri aktarmasına olanak tanır.
    • Dinamik yardım için 1.0.0 sürümünü Microsoft.PowerShell.Pager kullanacak şekilde güncelleştirildi
    • Hassas geçmiş öğelerinin temizlenmesi iyileştirildi
    • Çok sayıda hata düzeltmesi ve daha küçük geliştirmeler
  • PSReadLine 2.1.0

    Bu sürüm, 2.0.4 sürümünden bu yana eklenen aşağıdaki geliştirmeleri içerir:

    • Komut geçmişinden Tahmine Dayalı IntelliSense önerileri ekleme
    • 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 içerir:

    • -Chord Belirli anahtar bağlamalarının aranmasına izin vermek için parametresi Get-PSReadLineKeyHandler eklendi

Geri bildirim ve PSReadLine'a katkıda bulunma

GitHub'da PSReadLine

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

Ayrıca bkz:

  • PSReadLine, GNU okuma çizgisi kitaplığından büyük ölçüde etkilenir.