How can i use powershell to tail a specific windows event log? Is it possible?
Per MSDN docs:
Get-WinEvent
is designed to replace theGet-EventLog
cmdlet on computers running Windows Vista and later versions of Windows.Get-EventLog
gets events only in classic event logs.Get-EventLog
is retained in Windows PowerShell for backward compatibility.
And spurred on by my own need to tail a non-classic event log (would that be an event log nouveau perchance?) here is the wonderfully concise code of @mjolinor repurposed to use 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; }
}
}
I added in a few bells and whistles for convenience:
ShowExisting
parameter.Get-WinEvent
's default) due to the natural order that tail requires.