about_PSReadLine
Deskripsi Singkat
PSReadLine memberikan pengalaman pengeditan baris perintah yang ditingkatkan di konsol PowerShell.
Ada banyak pembaruan untuk PSReadLine sejak versi yang dikirim di Windows PowerShell 5.1.
- v2.3.5 pertama kali dikirim di PowerShell 7.4.2 dan 7.5.0-preview.3
- v2.3.4 pertama kali dikirim di PowerShell 7.4.0-rc.1
- v2.2.6 pertama kali dikirim di PowerShell 7.3.0
- v2.1.0 pertama kali dikirim di PowerShell 7.2.5
- v2.0.4 pertama kali dikirim di PowerShell 7.0.11
- v2.0.0 dikirim di Windows PowerShell 5.1
Untuk informasi selengkapnya tentang perbedaan versi, lihat about_PSReadLine_Release_Notes.
Deskripsi Panjang
Versi PSReadLine saat ini dapat diinstal dan digunakan pada Windows PowerShell 5.1 dan yang lebih baru. Untuk beberapa fitur, Anda harus menjalankan PowerShell 7.2 atau yang lebih tinggi.
PSReadLine memberikan pengalaman pengeditan baris perintah yang kuat untuk konsol PowerShell. Menyediakan:
- Pewarnaan sintaks dari baris perintah
- Indikasi visual kesalahan sintaks
- Pengalaman multibaris yang lebih baik (pengeditan dan riwayat)
- Pengikatan kunci yang dapat disesuaikan
- Mode Cmd dan Emacs
- Banyak opsi konfigurasi
- Penyelesaian gaya Bash (opsional dalam mode Cmd, default dalam mode Emacs)
- Emacs yank/kill-ring
- Gerakan dan penghapusan "kata" berbasis token PowerShell
- IntelliSense Prediktif
- Tampilan Dinamis Bantuan di konsol tanpa kehilangan tempat Anda di baris perintah
PSReadLine memerlukan PowerShell 5.1, atau yang lebih baru. PSReadLine berfungsi dengan host konsol Windows default, Terminal Windows, dan Visual Studio Code. Ini tidak berfungsi di Windows PowerShell ISE.
PSReadLine dapat diinstal dari Galeri PowerShell. Untuk menginstal PSReadLine dalam versi PowerShell yang didukung, jalankan perintah berikut.
Install-Module -Name PSReadLine -AllowClobber -Force
Catatan
Dimulai dengan PowerShell 7.0, PowerShell melompati beban otomatis PSReadLine di Windows jika program pembaca layar terdeteksi. Saat ini, PSReadLine tidak berfungsi dengan baik dengan pembaca layar. Penyajian dan pemformatan default PowerShell 7.0 pada Windows berfungsi dengan baik. Anda dapat memuat modul secara manual jika perlu.
IntelliSense Prediktif
Predictive IntelliSense adalah tambahan untuk konsep penyelesaian tab yang membantu pengguna dalam menyelesaikan perintah dengan sukses. Ini memungkinkan pengguna untuk menemukan, mengedit, dan menjalankan perintah penuh berdasarkan prediksi yang cocok dari riwayat pengguna dan plugin khusus domain tambahan.
Aktifkan IntelliSense Prediktif
IntelliSense prediktif dinonaktifkan secara default. Untuk mengaktifkan prediksi, cukup jalankan perintah berikut:
Set-PSReadLineOption -PredictionSource History
Parameter PredictionSource juga dapat menerima plugin untuk persyaratan khusus domain dan kustom.
Untuk menonaktifkan Predictive IntelliSense, cukup jalankan:
Set-PSReadLineOption -PredictionSource None
Pengikatan Kunci Kustom
PSReadLine mendukung pengikatan kunci kustom menggunakan Set-PSReadLineKeyHandler
cmdlet. Sebagian besar pengikatan kunci kustom memanggil salah satu fungsi yang dapat diikat, misalnya
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
Anda dapat mengikat ScriptBlock ke kunci. ScriptBlock dapat melakukan hampir semua yang Anda inginkan. Beberapa contoh yang berguna termasuk
- edit baris perintah
- membuka jendela baru (misalnya, bantuan)
- mengubah direktori tanpa mengubah baris perintah
ScriptBlock menerima dua argumen:
$key
- Objek [ConsoleKeyInfo] yang merupakan kunci yang memicu pengikatan kustom. Jika Anda mengikat ScriptBlock yang sama ke beberapa kunci dan perlu melakukan tindakan yang berbeda tergantung pada kuncinya, Anda dapat memeriksa$key
. Banyak pengikatan kustom mengabaikan argumen ini.$arg
- Argumen arbitrer. Paling sering, ini akan menjadi argumen bilangan bulat yang diteruskan pengguna dari pengikatan kunci DigitArgument. Jika pengikatan Anda tidak menerima argumen, wajar untuk mengabaikan argumen ini.
Mari kita lihat contoh yang menambahkan baris perintah ke riwayat tanpa mengeksekusinya. Ini berguna ketika Anda menyadari bahwa Anda lupa melakukan sesuatu, tetapi tidak ingin memasukkan kembali baris perintah yang telah Anda masukkan.
$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
Anda dapat melihat lebih banyak contoh dalam file SamplePSReadLineProfile.ps1
, yang diinstal di folder modul PSReadLine .
Sebagian besar pengikatan utama menggunakan beberapa fungsi pembantu untuk mengedit baris perintah. API tersebut didokumenkan dalam about_PSReadLine_Functions.
Catatan
Riwayat Perintah
PSReadLine mempertahankan file riwayat yang berisi semua perintah dan data yang telah Anda masukkan dari baris perintah. File riwayat adalah file bernama $($host.Name)_history.txt
. Pada sistem Windows, file riwayat disimpan di $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine
. Pada sistem non-Windows, file riwayat disimpan di $env:XDG_DATA_HOME/powershell/PSReadLine
atau $env:HOME/.local/share/powershell/PSReadLine
.
Riwayat dapat berisi data sensitif termasuk kata sandi. PSReadLine mencoba memfilter informasi sensitif. Baris perintah apa pun yang berisi string berikut tidak ditulis ke file riwayat.
password
asplaintext
token
apikey
secret
PSReadLine 2.2.0 meningkatkan pemfilteran data sensitif
- Menggunakan PowerShell Abstract Sintaks Tree (AST) dari baris perintah yang diurai untuk mencari data sensitif.
- Menggunakan daftar cmdlet aman yang diizinkan dari modul SecretManagement untuk memungkinkan perintah tersebut ditambahkan ke riwayat. Daftar yang diizinkan berisi:
Get-Secret
Get-SecretInfo
Get-SecretVault
Register-SecretVault
Remove-Secret
Set-SecretInfo
Set-SecretVaultDefault
Test-SecretVault
Unlock-SecretVault
Unregister-SecretVault
Misalnya, perintah berikut diizinkan untuk ditulis ke file riwayat:
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
Perintah berikut ini tidak ditulis ke file riwayat:
$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.
Jika ada perintah lain yang tidak ingin Anda tulis ke file riwayat, Anda dapat menggunakan parameter AddToHistoryHandler cmdlet Set-PSReadLineOption
. Untuk contoh cara menggunakan AddToHistoryHandler, lihat Contoh 7 Set-PSReadLineOption.
PSReadLine 2.3.4 meningkatkan pemfilteran data sensitif
Meningkatkan scrubbing riwayat sensitif default untuk memungkinkan riwayat berisi akses properti yang aman.
Saat string sensitif adalah bagian dari akses properti:
- Jika operasi akses anggota ini bukan bagian dari penugasan, maka kami menganggapnya aman
- Jika tidak, jika sisi kanan adalah alur atau variabel, kami juga menganggapnya aman
Misalnya, kasus penggunaan berikut dianggap aman dan dapat disimpan ke riwayat.
$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
Rilis ini juga meningkatkan scrubbing riwayat sensitif untuk memungkinkan pengambilan token menggunakan az
alat baris perintah , gcloud
, dan kubectl
.
Misalnya, kasus penggunaan berikut dianggap aman dan dapat disimpan ke riwayat.
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
Umpan balik & berkontribusi pada PSReadLine
Jangan ragu untuk mengirimkan permintaan pull atau mengirimkan umpan balik di halaman GitHub.
Lihat Juga
- PSReadLine sangat dipengaruhi oleh pustaka readline GNU.