はじめに
この記事は、PowerShellの操作ログを残せたらなにかと便利だと思い、ログ出力方法を調べてやってみたので、その備忘録として書きました。
記事の内容に間違いや意見などありましたらコメントいただけると幸いです。
ログ自動取得のためにやること
Powershellには「プロファイル」というログイン時に自動実行されるスクリプトがあります。
UNIX系OSでいうところの .bash_profile
のようなものですね。
そのプロファイルにログ出力のコードを書くだけで、Powershellにログインすれば自動でログが記録されるようになります。
「ローカルグループポリシーエディター」という Windows のツールからログ出力設定を行うというアプローチもあるようですが、
このツールは残念ながら Windows 10 Home や Windows 11 Home には標準搭載されていません1。
私の環境 ( Windows 11 Home ) に無理やりインストールしてログ出力設定を有効化してみましたが、上手くいかず、ログが出力されませんでした。
標準で入ってないものを無理やり入れたからちゃんと動いてないのかもしれません。(私の設定の仕方が悪いのかもしれませんが...)
Home 以外の Windows OS をご利用の方は、この「ローカルグループポリシーエディター」を使う方法もあります。
結構簡単なのでやり方は調べてみてください。
環境
OS:Windows 11 Home
PowerShell:5.1.22621.1778
詳細手順
まずはプロファイルの作成から。
プロファイル自体が存在しない場合もあるので、そのときは自分で作成します。
(以下、作成する前提で説明します)
どこに作ればいいのかはパワーシェルの変数 $PROFILE
を見ると分かります。
> $PROFILE
C:\Users\<ユーザ名>\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
これがプロファイルのフルパスなので、このパスの通りに Microsoft.PowerShell_profile.ps1
という名前のプロファイルを作成します。
(ユーザ名は現在ログイン中のユーザ名に置き換えてください)
その上の WindowsPowerShell
ディレクトリも無ければ作成します。
プロファイルが作成できたら、次のコードを記述します。
# 現在の年月日時分秒を取得
$timestamp = Get-Date -Format "yyyy_MM_dd_HH-mm-ss"
# トランスクリプトファイル名を生成
$transcriptFileName = "Transcript_$timestamp.log"
# トランスクリプトを開始
Start-Transcript -Path "C:\foo\bar\$transcriptFileName"
C:\foo\bar\
の部分は、ログの出力先にしたいディレクトリを指定してください。
保存したら作業は完了です!
PowerShellにログインすると、下のようなメッセージが出力され、ログが出力されていることが確認できます。
フォルダを開くと、セッション単位(ログイン~ログアウトまでの間)でログファイルが生成されています。
以上です。