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$keyseç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.
passwordasplaintexttokenapikeysecretPSReadLine 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-SecretInfoGet-SecretVaultRegister-SecretVaultRemove-SecretSet-SecretInfoSet-SecretVaultDefaultTest-SecretVaultUnlock-SecretVaultUnregister-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,
HistoryAndPluginolarak ayarlanır.
History olarak ayarlanır.Yok olarak ayarlanırPSReadLine 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
ListViewseçimine izin vermek için PredictionViewStyle parametresi eklendi.
- Yeni
CommandPrediction API'lerine bağlandı.Microsoft.PowerShell.Pager'ın 1.0.0 sürümünü kullanacak şekilde güncellendiPSReadLine 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
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
-ChordparametresiGet-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.