この件に関するTechnetページ で概説されているスクリプトを使用して、Powershellの履歴をエクスポートできます。
Get-History | Export-Clixml ~\PowerShell\history.xml
また、PowerShellプロファイルでこの行を使用してPowershellセッションを開始すると、保存された履歴を自動的に読み込むことができます。
Import-Clixml ~\PowerShell\history.xml | Add-History
しかし、セッションを終了したときに履歴を自動的に保存する方法はありますか?コンソールとして ConEm を使用しています。
これは、別のPowerShellショートカットを使用せずに履歴を保持する別のアプローチです。
https://software.intel.com/en-us/blogs/2014/06/17/giving-powershell-a-persistent-history-of-commands から取得
管理者モードでPowerShellを開き、次のコマンドを実行して、使用しているPowerShellのバージョンを確認します。
$PSVersionTable.PSVersion
これを実行するには、3より古いバージョンが必要です。古いバージョンを使用している場合は、それを更新してください。
次のコマンドを実行して、PowerShellがモジュールを含むスクリプトをインポートまたは使用できるようにします。
set-executionpolicy remotesigned
PsGetをインストールし、次のコマンドを実行して必要なモジュールをインストールします。
(new-object Net.WebClient).DownloadString("http://psget.net/GetPsGet.ps1") | iex
import-module PsGet
install-module PsUrl
install-module PSReadline
次のスクリプトを作成します
$HistoryFilePath = Join-Path ([Environment]::GetFolderPath('UserProfile')) .ps_history
Register-EngineEvent PowerShell.Exiting -Action { Get-History | Export-Clixml $HistoryFilePath } | out-null
if (Test-path $HistoryFilePath) { Import-Clixml $HistoryFilePath | Add-History }
# if you don't already have this configured...
Set-PSReadlineKeyHandler -Key UpArrow -Function HistorySearchBackward
Set-PSReadlineKeyHandler -Key DownArrow -Function HistorySearchForward
ファイルをC:\Users\<username>\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
として保存します。ここで、PC上の正しいフォルダー名に置き換える必要があります。 「タイプとして保存」オプションをすべてのファイルに変更することを忘れないでください。
PowerShellを閉じて再度開き、保存したスクリプトの使用を開始します。
今後、
get-history
入力した最後の数百のコマンドを取得し、矢印キーを使用してコマンド間をスクロールできます。
それが誰かに役立つ場合に備えて、それを行う別の方法。
Powershellは、コマンド履歴をファイル "%userprofile%\ AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt"に自動的に保存するようになりました。
履歴を表示するために、プロファイルに次のような関数を追加しました...
function h2 {
$h = [System.Environment]::ExpandEnvironmentVariables("%userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt")
cat $h;
}
これで、「h2」と入力するだけで完全な履歴を表示できます。特に賢いわけではありませんが、効果的です。
完全ではありませんが、終了時にすべての履歴を保存するようにPowerShellに指示するstartコマンドでショートカットを使用できます。
powershell -NoExit -Command $ histlog = Register-EngineEvent -SourceIdentifier([System.Management.Automation.PsEngineEvent] :: Exiting)-Action {Get-History |エクスポート-Clixml〜\PowerShell\history.xml}
このショートカットから起動すると、PowerShellが終了イベントを取得するたびに履歴が〜\ PowerShell\history.xmlに保存されます。