如何为'get-eventlog'注册活动?

时间:2016-04-11 14:11:21

标签: powershell event-log

我需要在Windows 7事件日志中查看特定错误 - 是否有单行执行此操作?

所以:例如 - 我正在关注'磁盘'错误;所以我可以通过以下方式获取最新事件:

get-eventlog system  -source "disk" -after ([datetime]::Today)

(事实上这是另一篇文章的回答:Get-EventLog - easily filter by 'today'?

但显然我必须继续运行它以保持警惕。

2 个答案:

答案 0 :(得分:2)

没有单行。但是,不是轮询 EventLog,您可以使用System.Diagnostic.EventLog类并使用Register-ObjectEvent cmdlet注册到EntryWritten 事件

这里是我注册到应用程序日志并在回调中输出消息的示例:

$eventLog = New-Object System.Diagnostics.EventLog "application"
$eventLog.EnableRaisingEvents = $true
$job = Register-ObjectEvent -InputObject $eventLog -EventName "EntryWritten" -Action { Write-Host ($eventArgs.Entry.Message) } 
Receive-Job $job

您现在可以使用以下方法测试回调:

$eventLog.Source = "test"
$eventLog.WriteEntry("test")

test输出到控制台。

答案 1 :(得分:1)

它不是严格意义上的单行,但你所追求的是tail事件日志,你可以使用PowerShell执行以下命令:

$lastCheck = [DateTime]::Now.Date
while ($true) {
  Get-EventLog System -Source "disk" -After $lastCheck -ErrorAction SilentlyContinue
  $lastCheck = [DateTime]::Now.DateTime
  Start-Sleep 1
}

如果你更进一步将它包装在一个函数中,那么然后就会变成一个单行:

function Tail-EventLog ($source) {
  $lastCheck = [DateTime]::Now.Date
  while ($true) {
    Get-EventLog System -Source $source -After $lastCheck -ErrorAction SilentlyContinue
    $lastCheck = [DateTime]::Now.DateTime
    Start-Sleep 1
  }
}

您可以执行以下操作:

Tail-EventLog "disk"

您可以将其放在PowerShell Profile中,以确保始终可以使用。