🪟

PowerShellのコマンド実行履歴を取得する方法

2020/12/12に公開
1

PowerShellのコマンド実行履歴を確認したい

WindowsでPowerShellのコマンド実行履歴を確認したかったので、やり方を調べてみた。
いくつか方法があったのでメモしておく。本記事で紹介するのは以下3つのコマンドについて。

  1. Get-History
  2. Get-PSReadLineOption
  3. Start-Transcript

Get-History

Get-Historyコマンドを使うと、セッション内で実行したコマンド履歴一覧が取得できる。

Get-History
   [[-Id] <Int64[]>]
   [[-Count] <Int32>]
   [<CommonParameters>]

実行例

> Get-History

  Id CommandLine
  -- -----------
   1 git -v
   2 electron -v
   3 npx create-electron-app my-electron-app
   4 cd my-electron-app
   5 npm start

直近のコマンド実行履歴をサクッと見たいならこれ。

Get-PSReadLineOption

現在実行中のセッションだけではなく、以前のセッションで実行したコマンド履歴も取得したい場合はGet-PSReadLineOptionHistorySavePathを使う。

Get-PSReadLineOption []

実行例

(Get-PSReadlineOption).HistorySavePathを実行すると、コマンドの実行ログが記録されたファイルのパスが表示される。

> (Get-PSReadlineOption).HistorySavePath
C:\Users\unsol\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt

ConsoleHost_history.txt というテキストファイルにログが保存されている。

ConsoleHost_history.txt
git -v
npx create-electron-app my-electron-app
electron -v
node_modules\.bin\electron --version
ls
cd my-electron-app
npm start
npm run make
npx electron
npx electron --version
npm install -D electron-builder
npx electron-builder --help
npx electron-builder --win --x64
npm prune --production
npx electron-builder --win --x64
(Get-PSReadlineOption).HistorySavePath

実行コマンドだけを見たいなら十分だけど、技術系の記事を書く時にはコマンドの出力結果も確認したい。

Start-Transcript

Start-Transcript コマンドを使うと、コマンド実行後の入出力内容をすべてファイルに出力することができる。

Start-Transcript
     [[-Path] <String>]
     [-Append]
     [-Force]
     [-NoClobber]
     [-IncludeInvocationHeader]
     [-UseMinimalHeader]
     [-WhatIf]
     [-Confirm] 
     [<CommonParameters>]

実行例

コマンドの入出力記録開始

> Start-Transcript ps_log.txt -append

コマンドの入出力記録停止

> Stop-Transcript

出力ファイル

ps_log.txt
**********************
Windows PowerShell トランスクリプト開始
開始時刻: 20201212175308
ユーザー名: AURORA\unsol
RunAs ユーザー: AURORA\unsol
構成名: 
コンピューター: AURORA (Microsoft Windows NT 10.0.18363.0)
ホスト アプリケーション: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
プロセス ID: 84224
PSVersion: 5.1.18362.1110
PSEdition: Desktop
PSCompatibleVersions: 1.0, 2.0, 3.0, 4.0, 5.0, 5.1.18362.1110
BuildVersion: 10.0.18362.1110
CLRVersion: 4.0.30319.42000
WSManStackVersion: 3.0
PSRemotingProtocolVersion: 2.3
SerializationVersion: 1.1.0.1
**********************
トランスクリプトが開始されました。出力ファイル: ps_log.txt
PS C:\Users\unsol> git -v
unknown option: -v
usage: git [--version] [--help] [-C <path>] [-c <name>=<value>]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           <command> [<args>]
PS C:\Users\unsol> electron -v

v11.0.2
PS C:\Users\unsol> npx create-electron-app my-electron-app
√  Initializing Project Directory
√  Initializing Git Repository
√  Locating custom template: "base"
√  Copying Starter Files
√  Initializing NPM Module
√  Installing Template Dependencies
√  Installing NPM Dependencies
PS C:\Users\unsol> cd my-electron-app
PS C:\Users\unsol\my-electron-app> npm start

> my-electron-app@1.0.0 start C:\Users\unsol\my-electron-app
> electron-forge start

√  Checking your system
√  Locating Application
√  Preparing native dependencies
√  Launching Application

(node:84508) electron: The default of contextIsolation is deprecated and will be changing from false to true in a future
 release of Electron.  See https://github.com/electron/electron/issues/23506 for more information
バ ッ チ  ジ ョ ブ を 終 了 し ま す か  (Y/N)? t
バ ッ チ  ジ ョ ブ を 終 了 し ま す か  (Y/N)? y
PS C:\Users\unsol\my-electron-app> 終了エラー(): "パイプラインが停止されています。"
>> 終了エラー(): "パイプラインが停止されています。"
PS C:\Users\unsol\my-electron-app> Stop-Transcript
**********************
Windows PowerShell トランスクリプト終了
終了時刻: 20201212175553
**********************

若干余計な出力も入っているが、PowerShellの入出力内容すべてが確認できる。

プロファイル機能を利用すれば自動でログ出力もできるっぽい。
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.1

便利。

Easy Easy (完全に理解した Talk)

Discussion