web-dev-qa-db-ja.com

PowerShellセッションの終了時に履歴を自動的にエクスポートします

この件に関するTechnetページ で概説されているスクリプトを使用して、Powershellの履歴をエクスポートできます。

Get-History | Export-Clixml ~\PowerShell\history.xml

また、PowerShellプロファイルでこの行を使用してPowershellセッションを開始すると、保存された履歴を自動的に読み込むことができます。

Import-Clixml ~\PowerShell\history.xml | Add-History

しかし、セッションを終了したときに履歴を自動的に保存する方法はありますか?コンソールとして ConEm を使用しています。

5
stib

これは、別の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

入力した最後の数百のコマンドを取得し、矢印キーを使用してコマンド間をスクロールできます。

1
Rory

それが誰かに役立つ場合に備えて、それを行う別の方法。

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」と入力するだけで完全な履歴を表示できます。特に賢いわけではありませんが、効果的です。

4
user1751825

完全ではありませんが、終了時にすべての履歴を保存するようにPowerShellに指示するstartコマンドでショートカットを使用できます。

  1. デスクトップを右クリックして、新規-> ショートカットを選択します
  2. ショートカットパスとして次のように入力します。
 powershell -NoExit -Command $ histlog = Register-EngineEvent -SourceIdentifier([System.Management.Automation.PsEngineEvent] :: Exiting)-Action {Get-History |エクスポート-Clixml〜\PowerShell\history.xml} 
  1. ショートカットの名前を選択し、[〜#〜] ok [〜#〜]をクリックします。

このショートカットから起動すると、PowerShellが終了イベントを取得するたびに履歴が〜\ PowerShell\history.xmlに保存されます。

3
user387876