如何使用powershell来拖尾特定的Windows事件日志? 有可能吗?
答案 0 :(得分:7)
我偶尔也这样做过:
$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
}
答案 1 :(得分:3)
根据MSDN文档:
Get-WinEvent
旨在替换Get-EventLog
cmdlet 运行Windows Vista和更高版本Windows的计算机。Get-EventLog
仅在经典事件日志中获取事件。Get-EventLog
是 保留在Windows PowerShell中以实现向后兼容。
由于我自己需要尾随一个非 - 经典事件日志(那将是事件日志nouveau 偶然吗?)这里是一个非常简洁的代码@mjolinor重新使用Get-WinEvent
:
Set-PSDebug -Strict
function Get-WinEventTail($LogName, $ShowExisting=10) {
if ($ShowExisting -gt 0) {
$data = Get-WinEvent -provider $LogName -max $ShowExisting
$data | sort RecordId
$idx = $data[0].RecordId
}
else {
$idx = (Get-WinEvent -provider $LogName -max 1).RecordId
}
while ($true)
{
start-sleep -Seconds 1
$idx2 = (Get-WinEvent -provider $LogName -max 1).RecordId
if ($idx2 -gt $idx) {
Get-WinEvent -provider $LogName -max ($idx2 - $idx) | sort RecordId
}
$idx = $idx2
# Any key to terminate; does NOT work in PowerShell ISE!
if ($Host.UI.RawUI.KeyAvailable) { return; }
}
}
为方便起见,我添加了一些铃声和口哨声:
ShowExisting
参数将其调整为任意数字。Get-WinEvent
的默认值相反)进行排序。答案 2 :(得分:0)
首先,谢谢迈克尔!
针对我的用例进行了一些细化,包括显示整个多行消息值。
function Get-WinEventTail($Provider="JobRequestQueueConsumerBackgroundService", $ShowExisting=10) {
$formatProperty = @{ expression={$_.TimeCreated}; label="TimeCreated"},
@{ expression={$_.Message}; label="Message"; width=100}
if ($ShowExisting -gt 0) {
$data = Get-WinEvent -ProviderName $Provider -max $ShowExisting
if ($data) {
$data | sort RecordId | Format-Table -Property $formatProperty -Wrap
$idx = $data[0].RecordId
}
}
else {
$idx = (Get-WinEvent -ProviderName $Provider -max 1).RecordId
}
while ($true)
{
start-sleep -Seconds 1
$idx2 = (Get-WinEvent -ProviderName $Provider -max 1).RecordId
if ($idx2 -gt $idx) {
Get-WinEvent -ProviderName $Provider -max ($idx2 - $idx) | sort RecordId | Format-Table -Property $formatProperty -Wrap
}
$idx = $idx2
# Any key to terminate; does NOT work in PowerShell ISE!
if ($Host.UI.RawUI.KeyAvailable) { return; }
}
}
Get-WinEventTail
显示多行消息必须使用-Wrap
选项,否则省略号将在第一行的末尾截断该消息。设置列宽没有帮助。