在Linux中,如果我想即時觀察系統登入終端的情況,我可以使用帶有or開關的tail
命令輸出文件,“隨著文件的增長輸出附加資料”,例如:/var/log/syslog
-f
--follow
tail -f /var/log/syslog
……或也可以使用:
dmesg --follow
……其中-w, --follow
參數dmesg
代表「等待新訊息」。
無論如何,這種模式下的這兩個應用程式通常都會阻止終端,然後在新文字行/訊息出現時轉儲它們,直到您按 Ctrl-C 退出它們。
在Windows上,我理解相當於系統日誌的是事件(日誌)檢視器,它是一個GUI應用程式。過了一會兒,我發現https://www.petri.com/command-line-event-log- 其中指出可以使用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-10請注意,PowerShell 腳本的副檔名是.ps1
.
然後,我想專門在磁碟機的根目錄中建立腳本C:
。事實證明,這在 Windows 10 中受到保護 - 您必須具有管理員權限才能執行此操作(否則您將獲得Access is denied.
)。因此,我在管理員模式下啟動命令提示字元(“以管理員身份運行”),並建立這兩個檔案:
C:\WINDOWS\system32>cd C:\
C:\>echo > wevent_tail_01.ps1
C:\>echo > wevent_tail_02.ps1
請注意,這些文件不會是空的,而是包含文字行ECHO is on.
- 但是,可以刪除該行;或 (https://ss64.com/ps/syntax-comments.html) 前綴#
是 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