- PowerShellの セッション履歴と PSReadLine を組み合わせて、永続性と高度なセッション間検索を実現します。
- Get/Invoke/Add/Clear-History、ショートカット (F7、F8、F9、Ctrl+R/S)、および PSReadLine オプションを使用して PowerShell を管理します。
- CMD F7 と doskey を使用して履歴の表示、エクスポート、およびサイズ調整を行うことができますが、これはセッションごとにのみ可能です。
- イベント 4688/4689 による監査では、システム レベルでプロセスとコマンド ラインをログに記録できます。

コンソールに入力した内容を振り返ることは、ドキュメント作成、タスクの繰り返し、エラー修正を行う際に非常に役立ちます。Windowsではコマンドプロンプト(CMD)とPowerShellの両方が使用されており、それぞれコマンド履歴の扱い方が異なります。ショートカット、検索オプション、エクスポート、削除といった機能は習得しておくと便利です。
この実用的で包括的なガイドでは、 PowerShell と CMD で履歴を表示、検索、エクスポート、インポート、削除する方法、PSReadLine の永続履歴の仕組み、Clear-History が提供するパラメーター、作業を高速化するショートカット、フォレンジック ログが必要な場合にイベント 4688 と 4689 を使用してプロセスを監査する方法を学びます。
PowerShell と CMD: それぞれの歴史と仕組み
履歴管理に関して言えば、 PowerShellとCMDは全く異なるものです。CMDはアクティブなセッション中のコマンドのみを保持しますが、PowerShellは組み込みのセッション履歴と、PSReadLineモジュールによって維持される永続的な履歴を組み合わせて使用します。
PowerShell の組み込みセッション履歴は揮発性であり、コンソールを閉じると削除されます。Get-History コマンドレットでアクセスでき、Invoke-History、Add-History、Clear-History などのコマンドレットで管理できます。既定では、$MaximumHistoryCount 変数によってエントリ数が制限され、通常は 4096 に設定されています。
PSReadLine は、ユーザーとホストごとに履歴ファイルを保存し、セッション間で履歴を保持します。PowerShell 5.0 以降で利用可能なこのファイルを使用すると、上下矢印キーによるナビゲーションや、キーボードショートカットを使用した増分検索が可能になります。
PowerShell で履歴を表示および検索する
Get-History はセッション履歴への入り口です。ID、コマンドライン、実行順序を表示します。エイリアスは「h」です。ただし、これは現在のセッションで発生した事象のみを反映し、永続的な PSReadLine ファイルの内容は反映しません。
Get-History
コンソールでのキーボードショートカットは時間を節約します。上矢印キーで前のコマンド、下矢印キーで次のコマンド、F7キーでウィンドウに一覧表示、ESCキーで閉じる、F8キーでプレフィックスによる検索(入力してF8キーを押す)、F9キーでIDによる実行が可能です。
逆検索は非常に便利です。Ctrl+R を押すと、コマンドの一部を入力した履歴を遡って検索し、Ctrl+S を押すと、前方に検索します。PSReadLine では、「#string」で検索したり、Tab キーを押して一致した文字列間を移動したりすることもできます。
履歴の順序が奇妙に思えるかもしれません。PowerShellはコマンドを入力した時ではなく、コマンドが完了した時に履歴に追加します。また、ネストされたプロンプトでは、前のレベルに戻るまで一部のコマンドが記録されないため、長時間の実行では混乱を招く可能性があります。
PSReadLine による永続的な履歴
PSReadLineは、ユーザーとホストごとにテキストファイルに永続的なログを保持し、PowerShellを閉じて再度開いた後でも、以前に実行したコマンドを取得できるようにします。
%userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
Get-PSReadLineOption および Set-PSReadLineOption コマンドレットを使用すると、その動作を表示および変更できます。これにより、重複、大文字小文字の区別、保存パスとスタイルなど、さまざまな設定を構成できます。
Get-PSReadLineOption | Select HistoryNoDuplicates, MaximumHistoryCount, HistorySearchCursorMovesToEnd, HistorySearchCaseSensitive, HistorySavePath, HistorySaveStyle
検討すべき主な選択肢:
- HistoryNoDuplicates: 重複エントリを回避します。 重複の削減
- MaximumHistoryCount: 保存されるコマンドの最大数を制御します
- HistorySearchCursorMovesToEnd: 検索時のカーソル位置を調整します
- HistorySearchCaseSensitive: 大文字と小文字を区別した検索を実行します
- HistorySavePath: 履歴ファイルへのパスを定義します
- HistorySaveStyle: 履歴を保存するタイミングを決定します。オプションには、SaveIncrementally、SaveAtExit、SaveNothing があります。
これは Set-PSReadLineOption を使用してカスタマイズできます。たとえば、終了時のみ保存してディスクへの書き込みを減らすには、次のように設定します。
Set-PSReadLineOption -HistorySaveStyle SaveAtExit
履歴のサイズは、`$MaximumHistoryCount` を使用して制御することもできます。100 コマンドに制限するには、この変数を調整して PowerShell を再起動します。設定を永続化するには、PowerShell プロファイルに追加します。
$MaximumHistoryCount = 100
PowerShell で履歴をクリア、フィルター、管理する
Clear-History コマンドレットは、アクティブなセッションの履歴を消去しますが、永続的な PSReadLine ファイルには影響を与えません。これは、最初からやり直したり、ID、パターン、数量、または経過時間に基づいて特定のエントリを削除したりする場合に使用します。
パラメータセットを使用した主な構文:
Clear-History <int[]>] <int>]
Clear-History <int>] >]
使用されるパラメータ:-Id は識別子による削除、-CommandLine は正確なパターンまたはワイルドカードによる削除、-Count はエントリ数、-Newest は順序を反転して最新のエントリを削除する。また、-WhatIf による確認モードとシミュレーションモードもサポートしています。
例:アクティブなセッションのすべての履歴を削除します。
Get-History
Clear-History
Get-History
例: -Countと-Newestを使用して、最後の5件のエントリを削除します。
Clear-History -Count 5 -Newest
Get-History
例: -CommandLine でパターンに一致するエントリを削除します。
Clear-History -CommandLine '*Help*', '*Syntax'
Get-History
例:特定のIDによる削除:
Clear-History -Id 3, 5
Get-History
例:-Idと-Countを組み合わせて、特定のIDから順番に削除する例:
Clear-History -Id 7 -Count 5
Get-History
注意:-Count と -Id を組み合わせると、指定された Id から削除されます。-CommandLine を組み合わせると、一致する項目が順番に削除されます。デフォルトでは、-Newest を使用しない限り、最も古いエントリが削除されます。
PowerShell の履歴からコマンドを実行して読み込む
Invoke-History コマンドレットは、履歴エントリを上書きせずに実行します。エイリアスは「r」です。パラメーターを指定しない場合は、最後のエントリを繰り返します。ID を指定すると、そのエントリに指定されたコマンドを正確に実行します。
Invoke-History # Repetir la última entrada
Invoke-History -Id 12 # Ejecutar la entrada 12
履歴をエクスポートおよびインポートして、手順を文書化したり共有したりすることもできます。CSVまたはClixml形式でエクスポートし、Add-Historyコマンドレットを使用して再インポートします。
Get-History | Export-Csv -Path .\historial.csv -NoTypeInformation
Get-History | Export-Clixml -Path .\historial.xml
$h = Import-Clixml .\historial.xml
$h | Add-History
CMDで履歴を表示および管理する
CMD コマンドは、アクティブなセッション中のみ履歴を保持します。上下矢印キーで移動したり、PgUp キーと PgDn キーでスクロールしたりできます。F7 キーを押すと、保存されたすべてのコマンドを表示するウィンドウが開きます。ESC キーを押すと、そのウィンドウが閉じます。
CMD のその他の便利なショートカット: F9 を押すと、表示されているリストからコマンド番号を要求できます。F8 を押すと、その行に入力した内容で始まる一致するものを検索できます。
Doskey の機能が拡張されました。`doskey /history` コマンドで履歴全体を表示したり、リダイレクトを使用してファイルに保存したりできます。例えば、`doskey /history > C:\cmd_history.txt` のように指定します。また、`/listsize=100` コマンドでメモリサイズを調整することもできます。
メモリ内の履歴を消去するには、キーボードショートカットのAlt+F7を使用します。CMDを閉じると、事前にエクスポートしていない限り、履歴は失われることに注意してください。
CMDでより強力な永続的な履歴機能を実現するには、履歴管理と検索機能を大幅に向上させるClinkや、複数のコンソールを統合しPowerShellとWSL2をサポートするWindows Terminalなどのツールを使用できます。
イベント ビューアーでコマンドとプロセスを監査する
包括的かつ一元的な制御を行うには、高度な監査機能を使用してプロセスの作成をログに記録できます。イベント4688は、ユーザー、コンテキスト、コマンドライン情報など、開始された各プロセスを記録し、イベント4689はそのプロセスの終了を示します。
ローカルセキュリティポリシーの「詳細監査」セクションで、「監査プロセスの作成」を有効にし、必要に応じて成功または失敗を設定します。
次に、gpedit.msc で「コンピューターの構成」>「Windows の設定」>「セキュリティの設定」>「高度な監査ポリシーの構成」>「システム監査ポリシー」>「詳細な追跡」の順にポリシーを調整し、有効にします。
これらのイベントを表示するには、Windows のイベント ビューアーを開き、[Windowsログ] > [セキュリティ] に移動して、ID 4688 でフィルタリングします。より詳細な分析には、Logbinder Supercharger などのツールを使用すると便利です。
PowerShell の便利なコマンドレットと履歴メモ
主な履歴コマンドレットは、Get-History(エイリアス「h」)で表示、Invoke-History(エイリアス「r」)で実行、Add-Historyでコマンドを追加、Clear-History(エイリアス「clhy」)で削除します。PowerShellとPSReadLineの履歴は共存しますが、Clear-Historyはアクティブなセッションの履歴のみに影響します。
Clear-History に関する最終的な注意事項: パイプ入力は受け付けず、出力も返しません。-CommandLine ではワイルドカードをサポートし、-Verbose や -ErrorAction などの CommonParameters をサポートして、追加の制御が可能です。
PowerShellとCMDの履歴管理をマスターすれば、コマンドの迅速な取得、手順のデバッグ、情報の文書化、監査が容易になります。PSReadLineは履歴の保持と検索機能を提供し、Clear-Historyはセッションに残るコマンドを制御します。また、イベント4688と4689はログ記録をセキュリティとコンプライアンスのレベルまで高めます。
バイトの世界とテクノロジー全般についての情熱的なライター。私は執筆を通じて自分の知識を共有するのが大好きです。このブログでは、ガジェット、ソフトウェア、ハードウェア、技術トレンドなどについて最も興味深いことをすべて紹介します。私の目標は、シンプルで楽しい方法でデジタル世界をナビゲートできるよう支援することです。
