我正在 powershell 中编写一个脚本,它将等待 Windows 7 中的特定事件。安全日志中的事件 ID 4776。该脚本将在计算机锁定时运行。
该脚本应该在空闲状态下运行,本质上是一个 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 的人,你我唯一的希望。