Linux では、ターミナルでシステム ログインをリアルタイムで監視する場合、コマンドを使用して、またはスイッチを使用してファイルtail
を出力すると、「ファイルのサイズが大きくなるにつれて追加されたデータを出力します」と入力します。/var/log/syslog
-f
--follow
tail -f /var/log/syslog
...または以下も使用できます:
dmesg --follow
...ここで、-w, --follow
引数はdmesg
「新しいメッセージを待つ」を表します。
いずれにせよ、このモードでは、これらのアプリケーションは両方とも通常、ターミナルをブロックし、Ctrl + C を押して終了するまで、新しいテキスト行/メッセージが届くたびにそれをダンプします。
Windowsでは、システムログに相当するのはGUIアプリケーションのイベント(ログ)ビューアだと理解しています。しばらくして、https://www.petri.com/コマンドラインイベントログ-WEVTUTIL.EXE
コマンドライン アプリケーションを使用して Windows イベント ログを照会できることを示しています。
そこで、私はこれを試しました:
C:\>wevtutil qe System
dmesg
...ただし、これは単にすべてのイベントをダンプして終了します ( Linux で引数なしで呼び出す場合と同じです)。
ヘルプを調べましたwevtutil /?
が、「フォロー」モードにするコマンドライン引数が見つかりませんwevtutil
(つまり、その時点までのすべてをダンプした後に端末をブロックし、ログに記録された新しいイベント/テキスト行を印刷します)。
それで、フォロー モードで動作させることは可能でしょうかwevtutil
。可能であれば、どのようにすればよいでしょうか。可能でない場合、同じこと (フォロー モードで Windows のシステム イベント ログをターミナルにダンプすること) を実行できる別のユーティリティはありますか。
答え1
へ移動sysinternals.com、ProcessExplorer のドキュメントを参照してください。exe、イベント、メッセージ、リアルタイムまたは期間にフィルターを設定できます。トレースとデバッグもできます。Sysinternals Suite はイベント ビューアーよりもはるかに詳細な情報を提供します。
必要なイベントまたはオブジェクトが見つかったら、プロパティをチェックして、ターミナルで何を呼び出すことができるかを確認します。
答え2
さて、もう少し調べてみたら、こんなのが見つかりました:
... この動作に PowerShell を使用する例を示します。この投稿に基づいて、私が行ったことは次のとおりです。
まず、PowerShellスクリプトを作成したかったのですが、https://www.windowscentral.com/how-create-and-run-your-first-powershell-script-file-windows-10PowerShell スクリプトの拡張子は であることに注意してください.ps1
。
次に、ドライブのルートにスクリプトを具体的に作成したいと思いましたC:
。これは Windows 10 では保護されていることがわかりました。これを行うには管理者権限が必要です (そうでない場合は になりますAccess is denied.
)。そこで、コマンド プロンプトを管理者モード (「管理者として実行」) で起動し、次の 2 つのファイルを作成しました。
C:\WINDOWS\system32>cd C:\
C:\>echo > wevent_tail_01.ps1
C:\>echo > wevent_tail_02.ps1
これらのファイルは空ではなく、テキスト行がECHO is on.
含まれていることに注意してください。ただし、その行は削除できます。または(構文コメント) の先頭に#
which が付くのは、PowerShell のコメント文字です。
次に、同じターミナルからメモ帳でこれらのファイルを開いて編集しました。管理者権限が保持されているためです (そうしないと、メモ帳からファイルを保存しようとするとアクセスが拒否されます)。
C:\>notepad wevent_tail_01.ps1
C:\>notepad wevent_tail_02.ps1
次に、SO:15262196 から次のコードを貼り付けましたwevent_tail_01.ps1
:
$idx = (get-eventlog -LogName System -Newest 1).Index
while ($true)
{
start-sleep -Seconds 1
$idx2 = (Get-EventLog -LogName System -newest 1).index
get-eventlog -logname system -newest ($idx2 - $idx) | sort index
$idx = $idx2
}
...そして私はその他の回答でwevent_tail_02.ps1
使用しましたが、うまく動作しませんでした。そのため、この記事の残りの部分では のみを使用しますwevent_tail_01.ps1
。
さて、このスクリプトを PowerShell で実行します。windowscentral の投稿では、スクリプトはパスの先頭にアンパサンドとスペースを付けて実行されると指摘されています&
が、PowerShell を通常どおり起動して試してみると、次のようになります。
PS C:\> & "C:\wevent_tail_01.ps1"
& : File C:\wevent_tail_01.ps1 cannot be loaded because running scripts is disabled on this system. For more
information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:3
+ & "C:\wevent_tail_01.ps1"
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : SecurityError: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
windowscentral の投稿では、Set-ExecutionPolicy RemoteSigned
これを修正するために を使用することを推奨していますが、このコマンドを完了するには、管理者権限で PowerShell を再度実行する必要があります。ただし、これを現在のユーザーに制限することもできます。その場合、通常どおり起動された PowerShell を保持できます。
PS C:\> Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
Execution Policy Change
The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose
you to the security risks described in the about_Execution_Policies help topic at
https:/go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "N"): A
PS C:\>
したがって、この時点で、スクリプトを実行する権限があるはずです。
PS C:\> & "C:\wevent_tail_01.ps1"
... スクリプトはターミナルをブロックしますが、おそらくテキストはダンプされません。そこで、これが機能するかどうかをテストして確認したいと思います。
このためには、別のPowerShellを開く必要がありますが、管理プロパティが必要です。正しい情報はhttps://mcpmag.com/articles/2016/09/08/powershell-to-write-to-the-event-log.aspx- 簡単に言うと、Windows イベント ログに任意の内容を書き込むには、「ソース」を指定する必要があります。
PS C:\WINDOWS\system32> New-EventLog -LogName System -Source 'MySysTest'
...そして、Write-EventLog
イベント ログに書き込むために使用できます。
PS C:\WINDOWS\system32> Write-EventLog -LogName "System" -Source "MySysTest" -EventID 3001 -EntryType Information -Message "MyApp added a user-requested feature to the display." -Category 1 -RawData 10,20
PS C:\WINDOWS\system32> Write-EventLog -LogName "System" -Source "MySysTest" -EventID 3001 -EntryType Warning -Message "MyApp added a user-requested feature to the display." -Category 1 -RawData 10,20
PS C:\WINDOWS\system32> Write-EventLog -LogName "System" -Source "MySysTest" -EventID 3001 -EntryType Error -Message "MyApp added a user-requested feature to the display." -Category 1 -RawData 10,20
ここで、実行中かつブロックされていた最初の PowerShell に切り替えるとC:\wevent_tail_01.ps1
、次のような表示になります。
PS C:\> & "C:\wevent_tail_01.ps1"
Index Time EntryType Source InstanceID Message
----- ---- --------- ------ ---------- -------
2577 Jun 27 10:34 Information MySysTest 3001 MyApp added a user-requested feature to the dis...
2578 Jun 27 10:35 Warning MySysTest 3001 MyApp added a user-requested feature to the dis...
2579 Jun 27 10:35 Error MySysTest 3001 MyApp added a user-requested feature to the dis...
実際、最初はこの端末に切り替えたときにはこれが表示されませんでしたが、一度右クリックすると「起動」し、その後、リアルタイムで行をダンプし始めました。
まあ、これが私が望んでいたことだと思います - ただ、もう少し簡単だったらよかったのにとは思っていましたが...
編集: システム ログとアプリケーション ログの両方を「追跡」したい場合は、次の PowerShell スクリプトを使用します。
$sidx = (get-eventlog -LogName System -Newest 1).Index
$aidx = (get-eventlog -LogName Application -Newest 1).Index
while ($true)
{
start-sleep -Seconds 1
$sidx2 = (Get-EventLog -LogName System -newest 1).index
$aidx2 = (Get-EventLog -LogName Application -newest 1).index
get-eventlog -logname system -newest ($sidx2 - $sidx) | sort index
get-eventlog -logname application -newest ($aidx2 - $aidx) | sort index
$sidx = $sidx2
$aidx = $aidx2
}
...そしてテストするために、持っている一意の名前を持つ新しいプロバイダーを作成し、アプリケーション ログに登録します。
New-EventLog -LogName Application -Source 'MyAppTest'
...次のようにテスト/起動できます:
Write-EventLog -LogName "Application" -Source "MyAppTest" -EventID 3001 -EntryType Error -Message "MyApp added a user-requested feature to the display." -Category 1 -RawData 10,20