Windows でイベントのログを取ろうとあれこれ試してみたものの、なかなか成果が上がらなかったという方は、これが実際に役に立つかもしれません。テキスト ログや散在するメッセージに頼るのではなく、イベント ビューアーに直接書き込むと、トラブルシューティングがはるかに簡単になります。特に問題が発生した場合などです。そこで、このチュートリアルでは、PowerShell やコマンド プロンプト スクリプトを使用してこれらのログを Windows に直接書き込む方法について説明します。これは、デバッグやスクリプトの実行を追跡するのに非常に便利です。理由はわかりませんが、マシンによって、この方法がジェットコースターのようにうまくいくことがあり、うまくいくこともあれば、奇妙な権限エラーが発生することもあります。注意: セットアップによっては、スムーズに動作させるために PowerShell を管理者として実行する必要がある場合があります。また、カスタム ログを作成するにはいくつかの追加手順が必要ですが、完全に実行可能です。
Windows で PowerShell または CMD からイベント ログを書き込む方法
方法1: PowerShellのWrite-EventLogコマンドを使用する
まだサポートされているWindowsバージョンを使用している場合、これが最も簡単な方法です。イベントビューアーに適切な形式のログが直接書き込まれるため、スクリプトの実行内容や問題が発生した際の追跡が容易になります。スクリプトやコマンドの実行時にイベントビューアーに何も表示されない場合や、アプリにカスタムイベントソースが必要な場合などに有効です。
- まず、特定のログに初めて書き込む場合は特に、特定のソースを作成する必要があるかもしれません。以下のコマンドを使用します。
New-EventLog -LogName Application -Source "MyScripts" - すでにソースセットがある場合は、次のコマンドを実行します。
Write-EventLog -LogName Application -Source "MyScripts" -EntryType Information -EventID 1001 -Message "PowerShell script started"
このコマンドは、カスタムソースを含むメッセージをアプリケーションログに出力します。完了したら、イベントビューアー(eventvwr.msc)を開いて、イベントがアプリケーションログに表示されていることを確認してください。また、一部の設定では、PowerShellを管理者として実行する必要があります。Windowsは、ログへの書き込み権限がユーザーに付与されていることを確認する必要があります。うまくいかない場合は、権限を再確認してください。
方法 2: eventcreate.exe を使用してコマンド プロンプトからログを記録する
CMDやバッチファイルからスクリプトを作成したい場合は、eventcreate.exe隠れたヒーローと言えるでしょう。Windowsに組み込まれているので、追加の設定は必要ありません。基本的に、面倒な手間をかけずにログエントリを直接作成します。
- 次に例を示します。
eventcreate /t information /l application /id 1 /d "Batch script started"
シンプルですが効果的です。イベントビューアーのログにメッセージが表示されます。ただし、PowerShellのように新しいカスタムログを作成することはできません(まあ、簡単にはできませんが)。そのため、複雑なレジストリ編集やカスタムログの作成を希望しない限り、デフォルトのログを使用してください。
オプション 1: スクリプトのカスタム ログを作成する
デフォルトのアプリケーションログでは不十分で、専用のログが必要な場合は、カスタムログを作成できます。これは、大規模なアプリを開発している場合や、特定のスクリプトのログを項目別に記録する場合に役立ちます。手順は以下のとおりです。
- PowerShell を使用します。
New-EventLog -LogName CustomPSLog -Source "MyScripts"
しかし、ここで注意すべき点があります。イベントを書き込む前に、ログとソースが存在することを確認してください。エラーを避けるために、既に存在するかどうかを確認することをお勧めします。
if (-not [System. Diagnostics. EventLog]::SourceExists('MyScripts')) { New-EventLog -LogName CustomPSLog -Source 'MyScripts' } Write-EventLog -LogName CustomPSLog -Source 'MyScripts' -EntryType Information -EventID 1 -Message "Test log entry"
これを実行すると、 「アプリケーションとサービスログ」の下に「CustomPSLog」という新しいログが作成され、イベントビューアーに表示されます。ログはにファイルとして保存されるので、基本的には標準的なものです。.evtx%SystemRoot%\System32\Winevt\Logs
PowerShell Core (7+) に関する注意事項
奇妙なのは、PowerShell Core(7以降)ではサポートされなくなったことです。代わりに、 New-WinEventWrite-EventLogやカスタムプロバイダーなどを使って面倒な手続きを踏まなければなりません。これは混乱を招く可能性があるため、対応できる環境が整っていない限り、Windows PowerShell 5.1を使用するか、フラグを使ってスクリプトを実行してシンプルにすることをお勧めします。-UseWindowsPowerShell
場合によっては、Microsoft. PowerShell. Managementモジュールをインポートするだけでも役立ちます。
Import-Module Microsoft. PowerShell. Management -UseWindowsPowerShell Write-EventLog -LogName CustomPSLog -Source 'MyScripts' -EntryType Information -EventID 1 -Message "Testing in PS Core"
重要: 権限は重要です
このちょっとしたヒント、本当に役立ちます。ログやソースを作成するには、特に新しいカスタムログを作成する場合は、管理者権限が必要です。管理者以外のアカウントには制限があり、管理者権限を持つユーザーが作成した既存のログやソースにのみイベントを送信できます。そのため、権限エラーが発生した場合は、PowerShellまたはCMDを管理者として実行してください。
もしかしたら、一部のログが表示されなかったり、作成できなかったりするのは、このためかもしれません。このような場合、Windowsのセキュリティは必ずしも頼りにならないかもしれません。
まとめ
- 必要に応じて、書き込む前にソースを作成します
New-EventLog。 Write-EventLog既存のログにエントリを追加するために使用します。- CMD の場合、
eventcreate.exeうまく機能します。 - 専用のログが必要ですか? 作成して
New-EventLog権限を確認してください。 - PowerShell Core では、追加の手順を実行するか、Windows PowerShell 互換モードで実行する必要がある場合があります。
まとめ
これはログ記録方法としてはそれほど魅力的とは言えません。Windowsは権限やソースの扱いが面倒な場合があるからです。しかし、一度設定してしまえば、トラブルシューティングがずっとスムーズになります。必要なのは、正しいコマンドを覚えて、管理者権限で実行することだけです。それだけです。Windowsは当然ながら、必要以上に物事を複雑にしています。
特にログの自動化や複数のマシンで実行されるスクリプトからの情報収集をしようとしている方にとって、この方法が数時間の節約になれば幸いです。頑張ってください!