2013-02-22 67 views
0

我正在寻找使用Powershell监视特定事件ID的2003和08服务器列表的“安全”日志。到目前为止,我用这个使用Powershell监视EventID的安全日志

$servers = gc c:\temp\servers.txt 
foreach ($server in $servers) 
{ 
    $Query = "SELECT * FROM __instanceCreationEvent WHERE TargetInstancISA 'Win32_NTLogEvent' AND TargetInstance.LogFile = 'Security' AND TargetInstance.EventCode = '529' " 

    Register-WMIEvent -ComputerName $server -Query $Query -sourceIdentifier "$server" -Action 

    {Write-Host "The following Event ID of 529 has been found in the Security log on $server} 

    } 

但是你怎么能得到日志条目的时间戳,只有最新的一个如果存在?

回答

0
+0

非常感谢mjolinor我会试一试。 – user1890242 2013-02-22 11:36:20

+0

应该工作。它的设计与您所描述的完全相同 - 监控多个服务器以查找特定事件并发送通知。 – mjolinor 2013-02-22 11:42:05

+0

好吧我跑了这个,并按照指示,但得到这个错误[:数组分配给[#]失败:无法将值“#”转换为键入“System.Int32”。错误:“索引超出范围,必须是非负数,小于集合的大小。” 参数名称:startIndex“。在C:\ Scripts \ Events Monitor.ps1中:37 char:45 1} + CategoryInfo:InvalidOperation:(1:Int32)[],RuntimeException + FullyQualifiedErrorId:ArrayAssignmentFailed – user1890242 2013-02-22 11:56:15

0

保持简单:

$servers = gc c:\temp\servers.txt 
foreach ($server in $servers) 
{ 
    $events = Get-EventLog -ComputerName $server -LogName "Security" | Where-Object  {$_.EventID -eq "529"} 
    if ($events -ne $null) 
    { 
     foreach ($event in $events) 
     { 
      $event.TimeGenerated 
     } 
    } 
} 
+0

谢谢,我知道你能做到这一点,但是1)它在多台计算机上运行时速度很慢2)它不会通知我有任何新的事件到达。 – user1890242 2013-02-22 11:08:14

2

忘记WMI。使用get-eventlog。

[string[]]$Servers = @("server1","server2") 
Get-EventLog -LogName Security -ComputerName $Servers -Newest 1 -InstanceId 529 | select EventID,TimeGenerated,MachineName