【作成中】PowerShellでログを取得する

PowerShell でログを取る方法はいくつかあります。

方法の使い分け

方法向いている用途
Start-Transcript手動操作の記録・デバッグ
Write-Log 関数本番スクリプトのログ管理
エラーのみ記録定期実行タスクのエラー監視
Out-File / Export-Csvコマンド結果の保存・集計
イベントログシステム管理・監査ログ
目次

セッション全体の入出力をファイルに記録する(Start-Transcript)

TeraTermのログのように、作業中のログが保存できます。

# ログ開始
Start-Transcript -Path "C:\logs\session.log"

# ここで実行したコマンドがすべて記録される
Get-Service
Get-Process

# ログ終了
Stop-Transcript

また、スクリプトの先頭と末尾に入れて全操作が記録することもできます。

コマンド結果をファイルに保存する

# 上書き保存
Get-Service | Out-File "C:\logs\services.log"

# 追記
Get-Service | Out-File "C:\logs\services.log" -Append

# CSV で保存(Excel で開ける)
Get-Service | Export-Csv "C:\logs\services.csv" -Encoding UTF8 -NoTypeInformation

スクリプト内でファイルに書き出す

$logFile = "C:\logs\app.log"

function Write-Log {
    param([string]$Message, [string]$Level = "INFO")
    $timestamp = Get-Date -Format "yyyy/MM/dd HH:mm:ss"
    $line = "[$timestamp] [$Level] $Message"
    Add-Content -Path $logFile -Value $line
    Write-Host $line
}

# 使い方
Write-Log "処理を開始します"
Write-Log "エラーが発生しました" -Level "ERROR"
Write-Log "処理が完了しました"
```

ログファイルの中身:
```
[2026/03/16 10:00:00] [INFO] 処理を開始します
[2026/03/16 10:00:01] [ERROR] エラーが発生しました
[2026/03/16 10:00:02] [INFO] 処理が完了しました

エラーだけ記録する

try {
    Get-Service "存在しないサービス" -ErrorAction Stop
}
catch {
    $timestamp = Get-Date -Format "yyyy/MM/dd HH:mm:ss"
    Add-Content -Path "C:\logs\error.log" -Value "[$timestamp] ERROR: $($_.Exception.Message)"
}

Windows イベントログに記録する

# イベントログへ書き込む
Write-EventLog -LogName Application `
               -Source "MyScript" `
               -EventId 1001 `
               -EntryType Information `
               -Message "スクリプトが正常に完了しました"

# イベントログを確認
Get-EventLog -LogName Application -Source "MyScript" -Newest 10

まとめ

定期実行スクリプトには 方法2(Write-Log関数)+ 方法3(エラー記録) の組み合わせが最も実用的です。

よかったらシェアしてね!
  • URLをコピーしました!
目次