2013-02-22 32 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