Aracılığıyla paylaş


about_PSReadLine

Kısa açıklama

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

Uzun açıklama

Windows PowerShell 5.1'de gelen sürümden bu yana PSReadLine'da birçok güncelleştirme yapılmıştır.

  • v2.3.6 ilk olarak PowerShell 7.4.7 ve 7.5.0'da gönderildi
  • v2.3.5 ilk olarak PowerShell 7.4.2 ve 7.5.0-preview.3 sürümünde gönderildi
  • v2.3.4 ilk olarak PowerShell 7.4.0-rc.1'de gönderildi
  • v2.2.6 ilk olarak PowerShell 7.3.0'da gönderildi
  • v2.1.0 ilk olarak PowerShell 7.2.5'te gönderildi
  • v2.0.4 ilk olarak PowerShell 7.0.11'de gönderildi
  • v2.0.0, Windows PowerShell 5.1'de kullanıma sunar

Sürüm farklılıkları hakkında daha fazla bilgi için bkz . about_PSReadLine_Release_Notes.

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

Ö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

PSReadLineSamplePSReadLineProfile.ps1olan dosyasında daha 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.

Notes

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ş dosyası adlı $($Host.Name)_history.txtbir dosyadır ve her konak için benzersiz bir dosyayla sonuçlanır. Örneğin, Visual Studio Code'da PowerShell Uzantısı konsolunun geçmiş dosyası şeklindedir Visual Studio Code Host_history.txt.

  • Windows sistemlerinde, geçmiş dosyası konumunda $Env:APPDATA\Microsoft\Windows\PowerShell\PSReadLinedepolanır.
  • Windows olmayan sistemlerde, geçmiş dosyaları veya $Env:XDG_DATA_HOME/powershell/PSReadLinekonumunda $Env:HOME/.local/share/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 AddToHistoryHandlerSet-PSReadLineOption. 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, , azve gcloud komut satırı araçlarını kullanarak belirtecin alınmasına izin vermek için hassas geçmiş temizlemeyi kubectlgeliş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

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 bakınız

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