2013-04-11 45 views
1

我正在使用PowerShell編寫腳本,它將等待Windows 7中的特定事件。 安全日誌中的事件ID 4776。該腳本將在計算機被鎖定時運行。等待PowerShell中的特定事件

該腳本應該運行在空閒狀態,基本上是一個while(true)循環,並且它將等待事件發生的「失敗審計」。一旦事件發生,它將添加一個計數器。一旦事件在「成功審計」狀態下發生,它將從循環中斷開,並由腳本完成。

我最初的想法,就是把事件的日期,並比較運行時間的日期,如果它匹配,然後等

我到目前爲止有:

$i=0 
while(true){  
    $date = Get-Date -format G 
    $eventtime_fail=Get-EventLog Security | ? {$_.EventId -eq 4776} | where {$_.entrytype -eq "FailureAudit"} | Select-Object -expand TimeGenerated | Select -first 1 
    $eventtime_success=Get-EventLog Security | ? {$_.EventId -eq 4776} | where {$_.entrytype -eq "SuccessAudit"} | Select-Object -expand TimeGenerated | Select -first 1 

    if($date -eq $eventtime_fail){ 
     $i++ 
    } 
    else if($date -eq $eventtime_success){ 
      break 
    } 
} 

我意識到我可以簡單地創建一個計劃任務,並完成它,但我真的需要這是獨立的。該腳本將在計算機鎖定後運行,並在計算機解鎖後停止執行。

在Windows XP中,腳本有一種等待事件發生的方法,然後運行某種指令,這就是我需要的,這叫做eventtriggers.exe,它在Vista出現時被移除並計劃任務取代它,但是,計劃的任務不能通過PowerShell腳本以相同的方式工作。

有沒有辦法做到這一點,而不是我的做法呢?有沒有辦法讓eventtriggers.exe回來,或者至少有這樣的事情?幫助我的人StackOverflow,你我唯一的希望。

+0

您的腳本可以安排自己(或安排其他腳本)在計算機鎖定時運行。這會算作「獨立」嗎?至少這不涉及你必須去配置一個計劃任務。現在你在做一個'while(true)'循環的方式,意味着很多浪費的循環。 –

+0

這是真的。但是我的主要關注點是這個劇本本身。我如何實時檢查事件。如果我鎖定了電腦,那麼可以說輸入一個錯誤的密碼,腳本應該對此作出響應。但我的擔心是如何。這就是爲什麼我試圖用時間和事件時間來做到這一點。 – ShadowM82

回答

1

我沒有測試它,但伊莫應該工作。嘗試創建事件日誌偵聽器。

$seclog = Get-EventLog -List | Where-Object {$_.Log -eq 'Security'} 
Register-ObjectEvent -InputObject $seclog -SourceIdentifier NewEventLogEntry -EventName EntryWritten -Action { 

    $entry = $event.SourceEventArgs.Entry 

    if($entry.EventID -eq 4776) 
    { 
     if($entry.EntryType -eq 'SuccessAudit') 
     { 
      'code for SuccessAudit' 
     } 
     elseif($entry.EntryType -eq 'FailureAudit') 
     { 
      'code for FailureAudit' 
     } 
    } 
} 
+0

太棒了。所以這個工作。現在像任何腳本/項目一樣,我又創建了一個錯誤。對不起,這是我第一次使用Powershell,所以請準備我的noob評論。我編輯了腳本以包括你添加的內容:'while($ true){[你的代碼在這裏] \t }'我設置了循環,一旦檢測到「成功審計」就中斷。然而,因爲「Register-ObjectEvent」在循環中,powershell給我一個錯誤,說明對象已經被創建。當我包含循環時,它運行良好,除了最後的錯誤。當我排除它時,什麼都沒有。 – ShadowM82

+0

爲什麼在寫入新事件時偵聽器調用時添加while循環? –

+0

那麼我需要這個腳本來抓取'FailureAudits'的多重實例。如果我刪除了while循環,腳本運行時什麼都不會發生。但是,當我在無限循環中運行腳本時(發生'SuccessAudit'時發生),腳本運行良好。在「SuccessAudit」時,PowerShell提示符以紅色運行,並顯示以下消息:** Register-ObjectEvent:無法訂閱事件,具有源標識符'NewEventLogEnter'的訂閱服務器已存在。** – ShadowM82