Command History dalam Sesi PowerShell

Awalnya, Windows PowerShell (seperti baris perintah cmd) menyimpan riwayat perintah yang dieksekusi hanya di sesi PowerShell saat ini, ketika Anda menutup jendela konsol PowerShell atau me-restart komputer, sejarah perintah PowerShell yang Anda ketik tidak disimpan di mana pun. Dibandingkan dengan bash, ini adalah kelemahan yang signifikan. Di PowerShell v5 yang diperkenalkan di Windows 10, kelemahan ini diperbaiki.

Konten:

  • Command History di PowerShell 5.0, Modul PSReadLine
  • Menghapus Riwayat Perintah di PowerShell
  • Impor riwayat perintah PowerShell ke sesi lain

Command History di PowerShell 5.0, Modul PSReadLine

Misalkan Anda mengetik dan menjalankan beberapa jenis perintah PowerShell yang kompleks. Di Windows 10 dan Windows Server 2016, bahkan setelah Anda me-restart komputer Anda, Anda dapat membuka sesi PowerShell baru dan tekan tombol panah atas. Perintah terakhir yang Anda masukkan harus ditampilkan di layar. Jika Anda terus menekan tombol atas, Anda akan melihat semua perintah dieksekusi sebelumnya. Dengan demikian, dengan menggunakan tombol atas dan bawah, Anda dapat menggulir sejarah perintah dan menjalankan kembali perintah yang diketik sebelumnya.

Di versi PowerShell sebelumnya, riwayat perintah di sesi saat ini tidak disimpan setelah ditutup. Dengan menggunakan tombol atas / bawah, Anda dapat menggulir melalui sejarah perintah di sesi saat ini atau menampilkan semuanya sekaligus menggunakan cmdlet Dapatkan-Sejarah.

Anda dapat menampilkan informasi lebih rinci tentang perintah yang dieksekusi sebelumnya, termasuk status dan waktu mulai / berakhirnya perintah:
Dapatkan-Sejarah | Format-Daftar -Properti *

PowerShell di Windows 10 secara default mengingat 4096 perintah terakhir yang disimpan dalam file teks yang terletak di setiap profil pengguna

% userprofile% \ AppData \ Roaming \ Microsoft \ Windows \ PowerShell \ PSReadline \ ConsoleHost_history.txt

. Riwayat disimpan secara terpisah untuk konsol PowerShell, secara terpisah untuk ISE.

Perintah PowerShell yang berjalan masuk ke riwayat hanya setelah selesai. Jika perintah PoSh membutuhkan waktu lama untuk dijalankan, Anda hanya akan melihatnya di histori perintah ketika selesai..

Jika Anda tidak ingin menelusuri seluruh sejarah perintah PowerShell, Anda dapat mencari riwayat perintah menggunakan pintasan keyboard CTRL+R (pencarian terbalik) dan CTRL+S (cari maju). Tekan kombinasi tombol dan mulai ketikkan bagian dari perintah yang ingin Anda temukan di perintah yang dieksekusi sebelumnya. Riwayat perintah akan mencari teks yang dimasukkan di posisi mana pun (tidak seperti pencarian di konsol PowerShell oleh F8 atau Shift + F8, yang mencari kecocokan hanya dari awal baris) dan opsi yang sesuai disorot.

Catatan. Fungsi logging perintah di PowerShell 5 tidak dibangun ke dalam Kerangka Kerja Manajemen Windows itu sendiri, tetapi didasarkan pada modul pihak ketiga PSReadLine, secara signifikan memperluas fungsionalitas konsol PowerShell. Pada Windows 10, ada di direktori C: \ Program File\ WindowsPowerShell\ Modul\ PSReadline dan secara otomatis diimpor ketika konsol PowerShell dimulai. PSReadLine menyediakan penyorotan sintaks di konsol, bertanggung jawab atas kemampuan untuk menggunakan pemilihan teks dengan mouse dan menyalin / menempel menggunakan CTRL + C dan CTRL + V. PSReadLine bukan bagian dari PowerShell 5 yang diinstal secara terpisah untuk versi Windows sebelumnya. Dengan demikian, jika Anda ingin menggunakan fungsionalitas pencatatan daya dari perintah PowerShell yang dijalankan di versi OS sebelumnya (Windows 7 / 8.1 / Windows Server 2008 / R2 / 2012R2) selain menginstal Windows Management Framework 5.1, Anda harus menginstal modul PSReadLine menggunakan manajer paket PackageManagement (sebelumnya PackageManagement package manager (sebelumnya OneGet) dari repositori online dengan perintah:

Instal-Modul PSReadLine

Daftar lengkap fungsi modul PSReadLine untuk mengelola riwayat pelaksanaan perintah di PowerShell dan kunci yang menyertainya dapat ditampilkan dengan perintah:

Dapatkan-PSReadlineKeyHandler | ? $ _. berfungsi -seperti '* hist *'

Deskripsi fungsi utama
---       --------             -----------
Deskripsi fungsi utama
---       --------                -----------
UpArrow PreviousHistory Ganti data yang dimasukkan dengan item log sebelumnya
DownArrow NextHistory Ganti entri Anda dengan entri log berikutnya
Ctrl + R ReverseSearchHistory Melakukan pencarian log interaktif secara terbalik
Ctrl + S ForwardSearchHistory Melakukan pencarian log interaktif ke arah maju
Alt + F7 ClearHistory Hapus semua item dari log baris perintah (bukan dari log PowerShell)
F8 HistorySearchBackward Search untuk item log sebelumnya yang dimulai dengan input saat ini, misalnya P ...
Shift + F8 HistorySearchForward Search untuk item log berikutnya yang dimulai dengan input saat ini, misalnya ...
Unbound ViSearchHistoryBackward Memulai pencarian log baru mundur.
Tidak terikat BeginningOfHistory Pergi ke item log pertama
Tidak terikat EndOfHistory Pergi ke item terakhir (input saat ini) di log

Riwayat perintah dikonfigurasi menggunakan cmdlet Dapatkan-PSReadlineOption dan Setel-PSReadlineOption. Pengaturan saat ini dapat diperoleh menggunakan desain ini:

Dapatkan-PSReadlineOption | pilih HistoryNoDuplicates, MaximumHistoryCount, HistorySearchCursorMovesToEnd, HistorySearchCaseSensitive, HistorySavePath, HistorySaveStyle

Kami mungkin tertarik dengan pengaturan untuk parameter berikut:

  • HistoryNoDuplicates - Apakah saya perlu menjaga perintah yang sama dalam riwayat PowerShell?
  • MaksimumHistoryCount - jumlah maksimum perintah yang disimpan (4096 perintah disimpan secara default);
  • HistorySearchCursorMovesToEnd - apakah akan pergi ke akhir perintah saat mencari;
  • HistorySearchCaseSensitive - apakah akan case sensitif ketika melakukan pencarian;
  • HistorySavePath - path ke file teks di mana sejarah perintah PowerShell disimpan;
  • HistorySaveStyle - fitur perintah penyimpanan:
    • Simpan Secara Inklusif - perintah disimpan selama eksekusi (secara default)
    • SaveAtExit - menyimpan histori saat menutup konsol
    • SaveNothing - menonaktifkan riwayat perintah

Anda dapat mengubah pengaturan modul PSReadLine menggunakan perintah Set-PSReadlineOption, misalnya:

Set-PSReadlineOption -HistorySaveStyle SaveAtExit

Dengan demikian, kemampuan untuk menyimpan riwayat perintah yang dieksekusi di PowerShell 5.0 adalah argumen lain untuk mengabaikan cmd demi konsol PoSh..

Menghapus Riwayat Perintah di PowerShell

Seperti yang kami jelaskan di atas, modul PSReadline menyimpan semua perintah konsol PowerShell ke file teks. Namun, dalam beberapa kasus, administrator mungkin harus memasukkan berbagai informasi rahasia (kredensial, kata sandi, alamat, data pribadi, dll.) Ke konsol PowerShell. Dengan demikian, administrator atau penyerang server lain dapat mengakses data dalam file teks. Untuk alasan keamanan, Anda mungkin perlu menghapus log perintah PowerShell atau sepenuhnya menonaktifkan riwayat perintah.

Cmdlet Bersihkan riwayat tidak dapat digunakan untuk menghapus riwayat perintah, karena itu hanya membersihkan daftar perintah sebelumnya yang menampilkan cmdlet Get-History.

Untuk menghapus riwayat perintah PoSh sebelumnya, Anda perlu menghapus file yang disimpan. Cara termudah untuk melakukan ini adalah dengan perintah:

Remove-Item (Get-PSReadlineOption) .HistorySavePath

Setelah itu, tutup sesi PoSh:

Jika Anda ingin sepenuhnya menonaktifkan penyimpanan perintah PoSh ke file teks, jalankan perintah:

Set-PSReadlineOption -HistorySaveStyle SaveNothing

Impor riwayat perintah PowerShell ke sesi lain

Dalam beberapa kasus, mudah untuk memiliki satu atau daftar perintah PowerShell yang sering digunakan di komputer yang berbeda. Anda dapat mengekspor riwayat perintah saat ini ke file xml dan mengimpornya di komputer lain. Ini dapat dilakukan dengan menyalin file ConsoleHost_history.txt ke profil pengguna di komputer yang diperlukan..

Anda juga dapat menggunakan cmdlet Ekspor-Clixml untuk mengekspor perintah dari sesi saat ini ke file:

Dapatkan-Sejarah | Ekspor-Clixml -Path c: \ ps \ commands_hist.xml

Untuk mengimpor perintah dari file ke sesi PoSh:

Add-History -InputObject (Import-Clixml -Path c: \ ps \ commands_hist.xml)

Untuk mengimpor perintah ke file secara otomatis di akhir sesi PoSh, Anda dapat mengikat skrip ke acara akhir sesi PoSh (!! Sesi ini harus diakhiri dengan perintah keluar, dan tidak hanya menutup jendela PoSh):

$ HistFile = Join-Path ([Environment] :: GetFolderPath ('UserProfile')) .ps_history
Daftar-EngineEvent PowerShell.Exiting -Action Get-History | Ekspor-Clixml $ HistFile | keluar-nol
if (Jalur uji $ HistFile) Impor-Clixml $ HistFile | Add-History