about_PSReadLine

Deskripsi Singkat

PSReadLine memberikan pengalaman pengeditan baris perintah yang ditingkatkan di konsol PowerShell.

Deskripsi Panjang

PowerShell 7.2 dikirim dengan PSReadLine 2.1.0. Versi saat ini adalah PSReadLine 2.3.4. 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

Catatan

Predictive IntelliSense diaktifkan secara default di PSReadLine 2.2.6. Untuk informasi selengkapnya lihat, riwayat rilis PSReadLine di bagian Catatan di bawah ini.

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 azalat 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

Riwayat rilis PSReadLine

Ada banyak pembaruan untuk PSReadLine sejak versi yang dikirim di Windows PowerShell 5.1.

  • Rilis saat ini adalah PSReadLine 2.3.4
  • PowerShell 7.4 dikirim dengan PSReadLine 2.3.4
  • PowerShell 7.3 dikirim dengan PSReadLine 2.2.6
  • PowerShell 7.2 dikirim dengan PSReadLine 2.1.0
  • PowerShell 7.0.11 dikirim dengan PSReadLine 2.0.4
  • PowerShell 5.1 dikirim dengan PSReadLine 2.0.0

Untuk daftar lengkap perubahan, lihat PSReadLine ChangeLog.

  • PSReadLine 2.3.4

Selain beberapa perbaikan bug, rilis ini mencakup peningkatan berikut:

  • ListView yang Dapat Digulir untuk IntelliSense Prediktif

    • Autoadjusts ukuran berdasarkan ukuran jendela terminal
    • Dapat berisi hingga 50 hasil prediksi
    • Header daftar dinamis yang memperlihatkan jumlah hasil dan sumber prediksi saat ini
  • Peningkatan sensitif riwayat scrubbing untuk memungkinkan pengambilan token dari az, , gclouddan kubectl

  • Meningkatkan scrubbing riwayat sensitif default untuk memungkinkan akses properti yang aman

  • Menambahkan dukungan untuk huruf besar, downcasing, dan kata-kata kapitalisasi

  • Buat penyelesaian tab memperlihatkan hasil yang ListItemText berbeda menurut kasus saja

  • Mendukung perintah <d,i,w> objek teks dalam mode edit VI

  • Ubah warna default untuk prediksi sebaris menjadi redup

  • Menambahkan sampel ke README untuk mengubah titik kode Unicode ke karakter Unicode dengan Alt+x

  • Tambahkan opsi TerminateOrphanedConsoleApps di Windows untuk mematikan proses terpasang konsol tanpa infanter yang mungkin mengacaukan pembacaan dari input Konsol

  • PSReadLine 2.2.6

    Dalam rilis ini, fitur Predictive IntelliSense diaktifkan secara default tergantung pada kondisi berikut:

    • Jika Terminal Virtual (VT) didukung dan PSReadLine berjalan di PowerShell 7.2 atau yang lebih tinggi, PredictionSource diatur ke HistoryAndPlugin
    • Jika VT didukung dan PSReadLine berjalan di PowerShell sebelum 7.2, PredictionSource diatur ke History
    • Jika VT tidak didukung, PredictionSource diatur ke None
  • PSReadLine 2.2.5

    Rilis layanan resmi dengan perbaikan bug kecil.

  • PSReadLine 2.2.2

    • PSReadLine menambahkan dua fitur IntelliSense prediktif baru:
      • Menambahkan parameter PredictionViewStyle untuk memungkinkan pemilihan .ListView
      • Koneksi PSReadLine ke CommandPrediction API yang diperkenalkan di PowerShell 7.2 untuk memungkinkan pengguna mengimpor modul prediktor yang dapat merender saran dari sumber kustom.
    • Diperbarui untuk menggunakan versi 1.0.0 untuk Microsoft.PowerShell.Pager bantuan dinamis
    • Meningkatkan scrubbing item riwayat sensitif
    • Banyak perbaikan bug dan peningkatan yang lebih kecil
  • PSReadLine 2.1.0

    Rilis ini menggulung peningkatan berikut yang ditambahkan sejak rilis 2.0.4:

    • Menambahkan saran Predictive IntelliSense dari riwayat perintah
    • Banyak perbaikan bug dan peningkatan API
  • PSReadLine 2.0.4

    Rilis ini menggulung peningkatan berikut yang ditambahkan sejak rilis 2.0.0:

    • -Chord Menambahkan parameter ke Get-PSReadLineKeyHandler untuk memungkinkan pencarian pengikatan kunci tertentu

Umpan balik & berkontribusi pada PSReadLine

PSReadLine di GitHub

Jangan ragu untuk mengirimkan permintaan pull atau mengirimkan umpan balik di halaman GitHub.

Lihat Juga

  • PSReadLine sangat dipengaruhi oleh pustaka readline GNU.