3
2

More than 1 year has passed since last update.

PowerShellの操作ログを自動取得する

Posted at

はじめに

この記事は、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にログインすると、下のようなメッセージが出力され、ログが出力されていることが確認できます。
fig_transcript.png

フォルダを開くと、セッション単位(ログイン~ログアウトまでの間)でログファイルが生成されています。
fig_transcript2.png

以上です。

  1. 参考:https://tanweb.net/2021/01/06/38190/

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2