3

如何有效清空 PowerShell 中 PSReadline 的所有歷史紀錄

 2 years ago
source link: https://blog.miniasp.com/post/2022/03/15/Clear-PowerShell-PSReadline-Command-History
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

我的 如何打造一個華麗又實用的 PowerShell 命令輸入環境 文章 (影片在此) 幫助了不少人調整他手中的 PowerShell 命令列環境,其中有個功能是在打字的時候可以提示你先前打過的所有命令,非常方便且實用。但上周有同事問了我一個問題,他曾經在 PowerShell 中輸入過一些敏感資料,但是又找不到清除歷史紀錄的方法,問我該怎麼辦才好。這篇文章我將分享解決之道!

清除一個 PowerShell 工作階段 (Session) 的歷史紀錄

你每次開啟一個 PowerShell 視窗,就會建立一個工作階段 (Session),而每個工作階段都會維護一份輸入命令的歷史紀錄。

由於 Windows 10 開始,預設 PowerShell 會自動載入 PSReadLine 模組,大大強化了 PowerShell 命令列環境的命令輸入能力。你可以使用以下兩個命令管理輸入命令的歷史紀錄:

  1. 取得歷史紀錄 (Get-History)

    Get-History
    

    你也可以用內建的 h 別名 (Alias),直接輸入 h 就可以查詢歷史紀錄:

    h
    

    以下是顯示在畫面上的範例:

      Id CommandLine
      -- -----------
       1 dir
       2 cls
       3 Get-Alias
    
  2. 執行歷史命令 (Invoke-History)

    Invoke-History 3
    

    你也可以用內建的 r 別名 (Alias),直接輸入 r <Id> 就可以查詢歷史紀錄:

    r 3
    
  3. 清除歷史紀錄 (Clear-History)

    Clear-History
    

    另外有個 Alt-F7 鍵盤快速鍵,當你按下之後,並不會清除所有歷史紀錄,而是讓你不能用 ⬆ 方向鍵載入之前輸入過的命令!

清除所有 PowerShell 輸入過的命令歷史紀錄

其實管理一個工作階段的歷史紀錄不怎麼實用,因為 PSReadLine 預設會記憶你有史以來所有輸入過的命令,所以你下次重開 PowerShell 又可以搜尋到所有的歷史紀錄!事實上,你在 PowerShell 視窗輸入的所有命令,全部都記錄到一個文字檔中,你可以用以下命令查出該檔案的路徑:

(Get-PSReadlineOption).HistorySavePath

預設應該是這個路徑:

$env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt

我的這個檔案有 13,370 行,可以想像裡面包含了多少東西,但這個機制非常單純,這反而可以讓我想出更多種應用:

  1. 你可以手動清除所有不想保留在歷史紀錄中的命令

    例如你曾經輸入過的金鑰或密碼,都應該找出來清空。

  2. 你可以加入所有你希望未來可以隨時查詢到的命令

    有很多常見的命令,可以整理一遍,這樣之後要輸入命令就會變的非常實用! 👍

    不過 PSReadLine 有個 MaximumHistoryCount 選項設定,定義能載入的最大歷史命令的數量:

    (Get-PSReadLineOption).MaximumHistoryCount
    

    這個設定的預設值為 4,096 筆,因此當你開啟 PowerShell 之後,並不會真的載入 13,370 行命令,而是只會載入命令最後面的 4,096 行而已。若你要加入一些自己希望在未來可以查到的命令,建議直接加到該檔案的最後面!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK