PowerShellでオレオレイベントログを作る

こんにちは、アーキテクトのやまぱんです。  

PowerShellでイベントログを触ってみたことはありますか？  
システム管理者やエンジニアとして、特定のアクションをログに記録したい場面って結構ありますよね？？？
でも、いざやろうとすると「え、どうやって？」と思う方も多いのではないでしょうか。

そこで今回は、PowerShellを使っていわゆる「オレオレイベントログ」を自作する方法をご紹介します！  
(知ってる人にはつまらない内容だとおもいますが(´･ω･｀))

**Windowsには標準のイベントログ（ApplicationやSystem**）がありますが、自分のアクションだけを記録する **「カスタムログ」** を作ることで、トラブルシューティングや監視がもっと楽になります。

オレオレイベントログを作るには、具体的には以下を使います。
+ [New-EventLog](https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.management/new-eventlog?view=powershell-5.1&viewFallbackFrom=powershell-7.4)
+ [Write-EventLog](https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.management/write-eventlog?view=powershell-5.1&viewFallbackFrom=powershell-7.4)


例の前半では、**標準の `Application` ログにイベントを記録する方法**、後半では **カスタムログを使った方法** を例示しています。また一部 **管理者権限** が必要ですが、実際にやってみると意外と簡単で楽しいですよ！さっそく試してみましょう！

補足コメントや質問、<font color="red">**いいね、拡散**</font>、是非お願いします🥺！  
間違ってたら<font color="red">**優しく**</font>教えてください！

# 概要
とりあえず、 New-EventLog と Write-EventLog について
## ```New-EventLog -LogName <String> -Source <String>```

https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.management/new-eventlog?view=powershell-5.1&viewFallbackFrom=powershell-7.4

### -LogName
+ 作成するイベントログの名前を指定します。既存のログに書き込む場合もこのオプションを指定する
+ 既定のログ（Application、System など）のほか、ユーザーが独自に作成したカスタムログも指定可能
+ 例: -LogName "MyCustomLog"

### -Source
+ イベントログに記録するイベントの「発信元」を指定する
+ 例: -Source "TestScript_AzureConnect_done"
+ Sourceは、特定のアプリケーションやスクリプトがイベントログに記録した情報を識別するための名称で、ログに一意である必要があります（1つのソース名は複数のログで共有できません）。

### 補足
**New-EventLog は、イベントログやソースが存在しない場合にのみ使用**、また 管理者権限で実行する必要があります。

## ```Write-EventLog -LogName <String> -Source <String> -EventId <Int32> -EntryType <EventLogEntryType> -Message <String>```

https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.management/write-eventlog?view=powershell-5.1&viewFallbackFrom=powershell-7.4

### -LogName
+ イベントを書き込みたいログを LogName で指定
+ 例: -LogName "Application" や -LogName "MyCustomLog"

### -Source
+ イベントの発信元を指定
+ 例: -Source "TestScript_AzureConnect_done"
+ New-EventLog コマンドで事前に登録されたソース名を指定する必要、ソースが存在しない場合はエラーが発生
### -EventId
+ イベントに割り当てる一意のIDを指定、数値で設定し、イベントを識別するために利用でき、通常 1 から 65535 の範囲の整数が指定可能。
+ 例: -EventId 2000

### -EntryType
+ イベントの種類を指定します。次の5種類が選択可能
> Information: 情報メッセージ
 Warning: 警告メッセージ
 Error: エラーメッセージ
 SuccessAudit: 成功監査イベント
 FailureAudit: 失敗監査イベント
+ 例: [System.Diagnostics.EventLogEntryType]::Information や[System.Diagnostics.EventLogEntryType]::Warning
### -Message
+ イベントの説明メッセージを指定します。ユーザーが読みやすい形でイベントの内容や発生原因を表します。
+ 例: -Message "Azureへ接続されましたよ！！！！！"

## 例)パターン１ ApplicationLogにオレオレイベントログを残す

まず最初に、標準の `Application` ログにカスタムの「オレオレイベントログ」を残す方法をご紹介します。  
この方法では、イベントログのソース名として「TestScript_AzureConnect」を設定し、Azureへの接続処理のメッセージを記録します。

### スクリプト内容

```PowerShell:イベントログ(Applicationログ)
# イベントログ(Applicationログ)書き込みの設定
## 管理者権限で実行する必要があります
$eventId = 2000
$entryType = [System.Diagnostics.EventLogEntryType]::Information
$message = "Azureへ接続します。"

# Applicationログへの書き込み
if (-not [System.Diagnostics.EventLog]::SourceExists("TestScript_AzureConnect")) {
    New-EventLog -LogName "Application" -Source "TestScript_AzureConnect"  # ソース名「TestScript_AzureConnect」をApplicationログに作成
    Write-Output "Applicationログ用のソース 'TestScript_AzureConnect' が作成されました。"
}

# Applicationログにイベントを書き込む
Write-EventLog -LogName "Application" -Source "TestScript_AzureConnect" -EventId $eventId -EntryType $entryType -Message $message
Write-Output "Applicationログにイベントが記録されました。"

```


### イベントビューアーでの確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/197ae33a-a425-04f4-2499-20bdb399d4c2.png)


## 例)パターン２ カスタムログにオレオレイベントログを残す
続いて、カスタムの MyCustomLog にオレオレイベントログを記録する方法です。こちらのログには、ソース名「TestScript_AzureConnect_done」として、Azure接続が完了したことを示す警告メッセージを記録します。

### スクリプト内容
```PowerShell:カスタムログ(MyCustomLog)
# イベントログ(カスタムログ(MyCustomLog))書き込みの共通設定
$eventId = 3000
$entryType = [System.Diagnostics.EventLogEntryType]::Warning
$message = "Azureへ接続されましたよ！！！！！"


#  カスタムログ(MyCustomLog)への書き込み
## 管理者権限で実行する必要があります
if (-not [System.Diagnostics.EventLog]::SourceExists("TestScript_AzureConnect_done")) {
    New-EventLog -LogName "MyCustomLog" -Source "TestScript_AzureConnect_done"  # ソース名「TestScript_AzureConnect_done」をカスタムログ MyCustomLog に作成
    Write-Output "カスタムログ 'MyCustomLog' が作成されました。"
}

# カスタムログにイベントを書き込む
Write-EventLog -LogName "MyCustomLog" -Source "TestScript_AzureConnect_done" -EventId $eventId -EntryType $entryType -Message $message
Write-Output "カスタムログ 'MyCustomLog' にイベントが記録されました。"

```
### イベントビューアーでの確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/f0700771-4085-5f8c-e3db-0d8af58ad1e9.png)


## おわり

お疲れ様でした！今回は、PowerShellで「オレオレイベントログ」を自作する方法について解説しました。いかがでしたか？意外と簡単にできたのではないでしょうか！

標準の`Application`ログに加えて、自分専用の`カスタムログ`を使いこなせるようになると、日々のシステム管理やトラブルシューティングがぐっと楽になります。特に、特定のイベントだけを独立して記録しておけば、あとで見返す時も便利ですよね。

ぜひ、日常業務の自動化や監視にPowerShellのイベントログ操作を活用してみてください。  
それでは、また次回の記事でお会いしましょう！引き続き、いいねや拡散もよろしくお願いします🙌