介紹 PowerShell 的指令歷史記錄使用方法,可快速查詢並執行用過的指令,節省打字時間。
在 Windows 的 PowerShell 中,有兩種不同的指令歷史記錄功能,一種是由 Windows PowerShell 終端機(GUI 圖形介面)所提供的「命令歷程記錄」,另外一種則是由 PowerShell 本身所提供的指令歷史記錄,以下是這兩種歷史記錄功能的使用方式。
「命令歷程記錄」是只有在 Windows PowerShell 終端機中才有的功能,在其他的 PowerShell 環境下就不一定能使用。
「向上」與「向下」兩個方向鍵可以用來查看過去執行的指令,按「向上」鍵可以往前查看,而「向下」鍵則是往後查看,這應該是大家都已經熟知的用法。
F8 鍵可以讓我們在指令歷史記錄中,搜尋指定關鍵字開頭的指令,例如要找 pi
開頭的指令,可以在 PowerShell 視窗中輸入 pi
之後,再按下 F8 鍵往前搜尋,若有符合的指令記錄,就會自動顯示在指令列中。
如果過去執行的指令中,有好多個符合的指令,我們可以多按幾下 F8 鍵,尋找我們要的指令。
Windows PowerShell 終端機的命令歷程記錄都是放在緩衝區之中,預設的緩衝區大小是 50(也就是可以儲存 50 筆指令記錄),若要改變這個設定,可以從「內容」設定中更改。
Step 1
在 Windows PowerShell 終端機標題列上,點選滑鼠右鍵,選擇「內容」。
Step 2
在「命令歷程記錄」區塊中,可以調整緩衝區大小與數目。緩衝區大小是指可以儲存的指令筆數,緩衝區數目是指可以同時讓多少個獨立的 Windows PowerShell 終端機儲存各自的命令歷程記錄。
PowerShell 本身也會自動記錄使用者執行過的指令。
若要查閱 PowerShell 內部的指令歷史記錄,可以使用 Get-History
這個指令:
# 查閱指令歷史記錄 Get-History
Get-History
預設只會顯示最後執行的 32 筆指令,若要顯示更多筆,可以使用 -Count
參數指定顯示指令的筆數:
Get-History -Count 100
如果要在 PowerShell 指令歷史記錄中,以關鍵字來搜尋想要用的指令,可以將 Get-History
的輸出導給 Select-String
進行篩選,例如若要搜尋含有 ping
關鍵字的指令,可以執行:
Get-History | Select-String -Pattern "ping"
PowerShell 的指令紀錄除了指令的內容之外,還有包含指令執行的時間點與執行結果,若要查看詳細的記錄,可以配合 Format-List
輸出詳細的資訊:
Get-History | Format-List -Property *
在查詢到想要使用的歷史指令之後,可以使用 Invoke-History
加上歷史指令的編號,即可直接執行該指令。例如若想要執行編號 4
的歷史指令,可以執行:
Invoke-History 4
若要清除 PowerShell 內部的指令歷史記錄,可以執行 Clear-History
指令:
Clear-History
若要將 PowerShell 的指令歷史記錄匯出成 XML 檔案,可以執行:
# 將指令歷史紀錄匯出為 XML 檔案 Get-History | Export-Clixml -Path D:my_commands.xml
若要從 XML 檔案中匯入 PowerShell 的指令歷史紀錄,可以執行:
# 從 XML 檔案匯入指令歷史紀錄 Add-History -InputObject (Import-Clixml -Path D:my_commands.xml)
如果想知道 PowerShell 儲存歷史記錄的檔案位置,可以使用 Get-PSReadlineOption
指令:
# 歷史記錄儲存位置 (Get-PSReadlineOption).HistorySavePath
我們可以直接用記事本開啟這個檔案,查看所有被儲存下來的歷史紀錄:
# 開啟歷史記錄儲存位置 notepad (Get-PSReadlineOption).HistorySavePath