Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

PowerShellコンソールの以前のコマンド履歴

既定では、Windows PowerShell(およびコマンドプロンプト)は、現在のPowerShellセッションでのみ実行されたコマンドの履歴を保存します。 PowerShellコンソールウィンドウを閉じるか、コンピューターを再起動すると、入力したPowerShellコマンドの履歴はどこにも保存されません。バッシュと比較して、これは重大な欠点です。 PowerShell 5.0以降 Windows 10(Windows Server 2016)で導入され、PSコンソールに入力されたすべてのコマンドがデフォルトでプレーンテキストのログファイルに保存されるようになりました。

PowerShell5.0以降のコマンド履歴

複雑なPowerShellコマンドを入力して実行したとします。 Windows10およびWindowsServer2016では、コンピューターを再起動した後でも、新しいPowerShellセッションを開いて、上矢印キーを押すことができます。最後に入力したコマンドが画面に表示されます。 「上」キーを押し続けると、以前に実行されたすべてのコマンドが表示されます。したがって、「上矢印」キーを使用します。 」と「下矢印 」PoShコマンドの履歴をスクロールして、以前に入力したコマンドを再実行できます。

以前のバージョンのPowerShellでは、現在のセッションのコマンドの履歴は、閉じられた後は保存されません。 upを使用する /ダウン キーを押すと、現在のPSセッションのコマンド履歴のみをスクロールするか、 Get-Historyを使用してコマンド履歴全体を一覧表示できます。 コマンドレット。

コマンドのステータスや開始/終了/期間など、現在のPowerShellセッションで以前に実行されたコマンドに関する詳細情報を表示できます。

Get-History | Format-List -Property *

PowerShellコンソールの以前のコマンド履歴

既定では、Windows 10のPowerShellは、各ユーザーのプロファイルにあるプレーンテキストファイルに保存されている最後の4096個のコマンドを保存します%userprofile%\ AppData \ Roaming \ Microsoft \ Windows \ PowerShell \ PSReadline \ ConsoleHost_history.txt

履歴は、PowerShellとPowerShellISEで別々に保存されます。

PowerShellコンソールの以前のコマンド履歴

PowerShellコマンドの実行に時間がかかる場合は、コマンドが完了するとコマンド履歴にのみ表示されます。

cmd.exeでは、次のコマンドを使用して、現在のセッションのコマンド履歴を表示できます。

doskey / history

F7 キーは、cmd履歴を検索するために使用されます。

PowerShellコンソールの以前のコマンド履歴

PowerShellコマンド履歴を検索する方法

上/下矢印を使用してPowerShellコマンド履歴全体をスクロールしたくない場合は、キーボードショートカット CTRL + Rを使用してコマンド履歴を検索できます。 (逆検索)および CTR + S (前方検索)。キーの組み合わせを押して、以前に実行したコマンドで検索するコマンドの一部の入力を開始します。入力したテキストは、コマンド履歴の任意の位置に表示されます( F8 を使用したPowerShellでの検索とは異なります)。 またはShift+ F8 、行の先頭からのみ一致を検索できます)。 PowerShellコンソールには、検索文字列に対応する前のコマンドが表示されます。コマンドでは、一致する行が強調表示されます。

見つかったコマンドが適切でない場合は、履歴の検索を続行するには、 CTRL + Rを押します。 / CTRL + S また。その結果、検索パターンに対応する以下のコマンドが画面に表示されます。

PowerShellコンソールの以前のコマンド履歴

F8を使用する キーを押すと、現在のコマンドラインのテキストと一致するコマンドを履歴から見つけることができます。たとえば、get-と入力します F8を押します 。このテキストに一致するコマンド履歴の最後のエントリが見つかります。履歴内の次のコマンドに移動するには、 F8を押します もう一度。

PowerShellコンソールの以前のコマンド履歴

を使用することもできます コマンド履歴を検索する文字。たとえば、 Get-WMIで始まる最後のコマンドを検索するには 、「#get-wmi」と入力します Tabを押します 鍵。パターンに一致する最後のコマンドがコンソールに表示されます:

PowerShellコンソールの以前のコマンド履歴

コマンド履歴は、従来のWindowsPowerShellと新しいPowerShellCoreの両方で同じように機能します(PoShバージョンを既にアップグレードしている場合)。

Notepad.exeウィンドウで以前のPoShコマンドのリストを取得するには、次のコマンドを実行します。

notepad(Get-PSReadLineOption | select -ExpandProperty HistorySavePath)

PowerShellコンソールの以前のコマンド履歴 クエリに一致する履歴内のコマンドのリストを表示するには、次を使用できます。

Get-History | Select-String -Pattern "Get-"

PowerShellコンソールの以前のコマンド履歴

PSReadLineモジュールを使用したPowerShellコマンド履歴の管理

PowerShell 5.0のコマンド履歴機能は、Windows Management Framework自体には組み込まれていませんが、サードパーティの PSReadLineに基づいています。 モジュール。PowerShellコンソールの機能を大幅に拡張します。 PSReadLineは、コンソールで構文を強調表示します。マウスでテキストを選択し、 CTRL + Cを使用してテキストをコピー/貼り付けします。 およびCTRL+ V 。 Windows 10のこのモジュールは、 C:\ Program Files \ WindowsPowerShell \ Modules \ PSReadlineにあります。 フォルダであり、PowerShellコンソールの起動時に自動的にインポートされます。

PSReadLineは、以前のバージョンのWindowsのスタンドアロンPowerShell 5.0(または決して)インストーラーには含まれていません。したがって、以前のWindowsバージョン(Windows 7/8.1およびWindowsServer2008R2 / 2012R2)でPowerShellコマンド履歴機能を使用する場合は、Windows Management Framework 5.1のインストールに加えて、PackageManagementモジュールを介してPSReadLineモジュールをインストールする必要があります。次のコマンドを使用して、オンラインリポジトリから(以前のOneGet):

Install-Module PSReadLine

PowerShellでコマンド履歴を管理するためのPSReadLineモジュールの機能の完全なリストと、それらに割り当てられたキーは、次のコマンドで表示できます。

Get-PSReadlineKeyHandler | ? {$_。function-like'*hist *'}

Key       Function                Description
---       --------                -----------
UpArrow   PreviousHistory         Replace the input with the previous item in the history
DownArrow NextHistory             Replace the input with the next item in the history
Ctrl+r    ReverseSearchHistory    Search history backwards interactively
Ctrl+s    ForwardSearchHistory    Search history forward interactively
Alt+F7    ClearHistory            Remove all items from the command line history (not PowerShell history)
F8        HistorySearchBackward   Search for the previous item in the history that starts with the current input - like NextHistory if the input is empty
Shift+F8  HistorySearchForward    Search for the next item in the history that starts with the current input - like NextHistory if the input is empty
Unbound   ViSearchHistoryBackward Starts a new seach backward in the history.
Unbound   BeginningOfHistory      Move to the first item in the history
Unbound   EndOfHistory            Move to the last item (the current input) in the history

PowerShellコンソールの以前のコマンド履歴

コマンド履歴は、 Get-PSReadlineOptionを使用して構成できます およびSet-PSReadlineOption コマンドレット。現在のPSReadline設定は、次のコマンドを使用して表示できます:

Get-PSReadlineOption | HistoryNoDuplicates、MaximumHistoryCount、HistorySearchCursorMovesToEnd、HistorySearchCaseSensitive、HistorySavePath、HistorySaveStyleを選択します

PowerShellコンソールの以前のコマンド履歴

次のPSReadlineパラメータの設定は、私たちにとって重要な場合があります。

  • HistoryNoDuplicates –同じコマンドを保存する必要があるかどうかを決定します。
  • MaximumHistoryCount –保存されているコマンドの最大数(デフォルトでは、最後の4096個のコマンドが保存されます)。
  • HistorySearchCursorMovesToEnd —検索時にコマンドの最後に移動する必要があるかどうかを決定します。
  • HistorySearchCaseSensitive –検索で大文字と小文字が区別されるかどうかを判断します(PSコマンド履歴ではデフォルトで大文字と小文字が区別されません)。
  • HistorySavePath –コマンドが保存されているファイルへのパスを示します。
  • HistorySaveStyle –コマンドの保存の特性を決定します:
    • SaveIncrementally —コマンドは実行後に保存されます(デフォルト)。
    • SaveAtExit PowerShellコンソールを閉じると、履歴が保存されます。
    • SaveNothing —コマンド履歴の保存を無効にします。

Set-PSReadlineOption を使用して、PSReadLineモジュールの設定を変更できます。 。例:

Set-PSReadlineOption -HistorySaveStyle SaveAtExit

PowerShellコンソールの以前のコマンド履歴

ログファイルに保存されるPowerShellコマンドの数を増やすには、次のコマンドを実行します。

Set-PSReadlineOption -MaximumHistoryCount 10000

したがって、実行されたPowerShellコマンドの履歴を保存する機能は、cmdよりもPoShコンソールを優先するための引数の1つです。

PowerShellコンソール履歴コマンドをクリアする方法

上で説明したように、PSReadlineモジュールはすべてのPowerShellコンソールコマンドをテキストファイルに保存します。ただし、場合によっては、管理者はPowerShellコンソールにさまざまな機密情報(資格情報、パスワード、アドレス、個人データなど)を入力する必要があります。したがって、別のサーバー管理者または攻撃者がプレーンテキストファイルの履歴データにアクセスできます。セキュリティ上の理由から、実行されたPowerShellコマンドの履歴をクリアするか、コマンド履歴を完全に無効にする必要がある場合があります。

明確な歴史 コマンドレットは、現在のPowerShellセッションのメモリ内コマンド履歴をクリアするためにのみ使用できます。 Get-Historyコマンドレットが表示する以前のコマンドのリストのみをクリアします。

履歴から削除できる前のコマンドは1つだけです:

Clear-History -count 1 -newest

または、特定のパターンですべてのコマンドをクリアします:
Clear-History -CommandLine * set-ad *

以前のPowerShellコマンドの履歴を完全にクリアするには、PSReadlineモジュールによって書き込まれたConsoleHost_history.txtファイルを削除する必要があります。現在のPowerShell履歴ファイルの場所を取得し、次のコマンドで削除できます:

Remove-Item(Get-PSReadlineOption).HistorySavePath

その後、PowerShellコンソールウィンドウを閉じます。

PowerShellコマンドの履歴をテキストファイルに保存することを完全に無効にする場合は、次のコマンドを実行します。

Set-PSReadlineOption -HistorySaveStyle SaveNothing

PowerShellコンソールの以前のコマンド履歴

PowerShellコマンド履歴を別のセッションにエクスポート/インポートする方法

頻繁に使用するPowerShellコマンドの同じセットを異なるコンピューターに配置すると便利な場合があります。コンピューター上の現在のコマンド履歴をxmlファイルにエクスポートして、他のコンピューターにインポートできます。また、これは、ConsoleHost_history.txtファイルを目的のコンピューターのユーザープロファイルにコピーすることで実行できます。

現在のセッションからファイルにコマンドをエクスポートするには、 Export-Clixmlを使用できます。 コマンドレット:

Get-History | Export-Clixml -Path c:\ ps \ Commands_hist.xml

コマンド履歴をファイルから別のPoShセッション(ローカルまたは別のコンピューター上)にインポートするには:

Add-History -InputObject(Import-Clixml -Path c:\ ps \ messages_hist.xml)

PowerShellコンソールの以前のコマンド履歴

PowerShellセッションの終了時に前のコマンドをファイルに自動的にエクスポートするには、スクリプトをPoShセッション終了イベントにバインドできます(!!セッションは必ず exitで終了する必要があります 単にPowerShellウィンドウを閉じるのではなく、コマンド):

$ HistFile =Join-Path([Environment] ::GetFolderPath('UserProfile')).ps_history
Register-EngineEvent PowerShell.Exiting -Action {Get-History |エクスポート-Clixml$HistFile} | out-null
if(Test-path $ HistFile){Import-Clixml $ HistFile |追加-履歴}


  1. Windows 10 でコマンド プロンプトと PowerShell のレガシー コンソールを有効または無効にする

    コマンド プロンプトのレガシー コンソールを有効または無効にするWindows 10 の PowerShell: Windows 10 の導入により、コマンド プロンプトにはほとんどのユーザーが気付いていない新機能が搭載されました。たとえば、行の折り返し、コマンド プロンプトのサイズ変更、コマンド ウィンドウの透明度の変更、およびただし、Windows 10 でコマンド プロンプトのこれらの機能を使用するには、コマンド プロンプトの [従来のコンソールを使用する] を無効にする必要があります。 PowerShell の場合も同様で、Windows 10 コマンド プロンプトとまったく同じ機

  2. コマンド プロンプトまたは PowerShell からアプリをインストールする方法

    ソフトウェアのインストールは、複雑で反復的で、エラーが発生しやすいプロセスになる可能性があります。使用する前に、まずダウンロードしてインストール プロセスを開始し、インストールされるまで待つ必要があります。これには多くの時間がかかります。コマンド プロンプトからアプリをインストールする方法を学習することで、この時間を節約できます。同時に PowerShell からアプリをインストールすることもできます。 PowerShell とコマンド プロンプトは、Windows 10 または 11 にアプリケーションをシームレスにインストールできます。ただし、アプリのインストールに必要な手順は少し異なり