0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PowerShell起動時に自動でログを開始する方法

Last updated at Posted at 2025-10-28

1.はじめに

PowerShellの作業ログを見返したいときに使えるログ出力自動化をやってみたので紹介します。
PowerShellを起動するたびに自動でログを残すことで、トラブルシューティングや操作履歴の確認が容易になります。

2.プロファイルのパスを確認

PowerShellには 「プロファイルスクリプト」 があり、起動時に自動実行されます。ここに Start-Transcript を書いておけば、毎回ログを自動出力することができます。

まず下記コマンドでプロファイルスクリプトのパスを確認します。

>$PROFILE

すると、以下のようなスクリプトファイルのパスが表示されます。
\...\Microsoft.PowerShell_profile.ps1

これがPowerShellが認識しているパスになります。

ただし、ここで表示されるのは「プロファイルスクリプトがあるべき場所のパス」なので、まだファイルが存在しない場合もあります。

3.プロファイルが無ければ新規作成

確認したパスにプロファイルスクリプトが存在するか確認します。
存在すれば 【4.プロファイルを編集】 の手順に移ります。
まだ存在しなければ、以下コマンドで作成します。

>New-Item -Type File -Path $PROFILE -Force

すると、次のようにプロファイルスクリプトが生成されます。

image.png

補足:スクリプトをモジュール化する方法

プロファイルスクリプト(Microsoft.PowerShell_profile.ps1)に任意のスクリプトを読み込ませて、スクリプトをモジュール化することもできます。
今回の例だと、ログを出力する処理なので、『logging.ps1』というプロファイル名で作ってみるのもおすすめです。
以下コマンドを投入してみます。

>$customProfile = "$env:USERPROFILE\Documents\PowerShellProfile\logging.ps1"
>New-Item -Type File -Path $customProfile -Force

※因みに、 $customProfile はセッション内でのみ有効な変数なので、powershellを閉じるとこの定義は消えます。

実行すると、指定したファイルパスにファイルが生成されます。

image.png

あとは、PowerShell起動時に自動で読み込ませるために、プロファイルスクリプトに「ドットソース」で読み込み記述を追加します。
logging.ps1 をプロファイルスクリプトとして読み込ませましょう。
image.png

これで、『logging.ps1』にログを出力するスクリプトを作成すれば、起動時にそのスクリプトを自動実行することができます。

ドットソース読み込みの「パス解釈」は厳密なため"日本語"を含むパスを直接指定しないでください。 特に「ドキュメント」などローカライズされたフォルダ名は、環境によって実体が異なる場合があり、スクリプト実行時にエラーの原因となります。
代わりに、$PROFILE や Split-Path を使って、環境に依存しないパス指定を心がけましょう。

#Microsoft.PowerShell_profile.ps1の記載例

$profileDir = Split-Path $PROFILE
$logScript = Join-Path $profileDir "logging.ps1"
if (Test-Path $logScript) {
    . $logScript
}

4.プロファイルを編集

先ほど作ったスクリプトファイルをメモ帳アプリやサクラエディタなどで編集し、処理内容を記載していきます。
次のようなスクリプトを作成しました。

# 現在の日時を「yyyyMMdd_HHmmss」形式で取得(例:20251028_234500)
$timestamp = Get-Date -Format "yyyyMMdd_HHmmss"

# ログファイルの保存先フォルダを定義(英数字のみで安定性を確保する)
$logDir = "C:\Logs\PowerShell"

# ログフォルダが存在しない場合は作成(初回実行時など)
if (!(Test-Path $logDir)) {
    New-Item -ItemType Directory -Path $logDir
}

# ログファイルのフルパスを構築(日時付きで一意性を確保)
$logPath = "$logDir\PowerShell_$timestamp.log"

# PowerShellのセッションログを開始(以降の操作がすべて記録される)
Start-Transcript -Path $logPath

5.再起動と動作確認

スクリプトの作成が終わったら、PowerShellを再起動します。
PowerShellの起動時に次のように表示されたら、ログ出力が成功しています。

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

トランスクリプトが開始されました。
出力ファイル: C:\..\log\PowerShell\PowerShell_20251025_132054.log

Id     Name            PSJobTypeName   State         HasMoreData     Location             Command
--     ----            -------------   -----         -----------     --------             -------
1      PowerShell.E...                 NotStarted    False                                ...


PS C:\Windows\system32>
PS C:\Windows\system32>

ログの出力先に指定したパスを直接見に行くと、ファイルが生成されていることが確認できます。

image.png

6.まとめと応用

PowerShell起動時にログを自動出力することで、操作履歴やトラブルの原因を追いやすくなると思います。
また、スクリプトをモジュール化することで、他の処理(履歴保存、環境変数の初期化など)も追加しやすくなります。
今後は history.ps1 や alias.ps1 など、用途別にスクリプトを分割していこうかと思います。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?