【发布时间】:2013-08-18 01:42:38
【问题描述】:
我的域控制器上有一个小脚本,它设置为通过 SMTP 向我发送有关最新安全事件 4740 的电子邮件。
脚本在手动执行时将按预期运行;但是,当设置为通过计划任务运行时,虽然它显示已执行,但没有任何反应(没有电子邮件)。
脚本如下:
If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{
$arguments = "& '" + $myinvocation.mycommand.definition + "'"
Start-Process powershell -Verb runAs -ArgumentList $arguments
Break
}
$Event = Get-EventLog -LogName Security -InstanceId 4740 -Newest 5
$MailBody= $Event.Message + "`r`n`t" + $Event.TimeGenerated
$MailSubject= "Security Event 4740 - Detected"
$SmtpClient = New-Object system.net.mail.smtpClient
$SmtpClient.host = "smtp.domain.com"
$MailMessage = New-Object system.net.mail.mailmessage
$MailMessage.from = "fromemail@domain.com"
$MailMessage.To.add("toemail.domain.com")
$MailMessage.IsBodyHtml = 1
$MailMessage.Subject = $MailSubject
$MailMessage.Body = $MailBody
$SmtpClient.Send($MailMessage)
计划任务设置如下:
RunsAs:LOCAL SYSTEM
Trigger: On event - Log: Security, Event ID: 4740
Action: Start Program - C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Argument: -executionpolicy bypass c:\path\event4740.ps1
我还尝试了以下方法:
Trigger: On event - Log: Security, Event ID: 4740
Action: Start Program - C:\path\event4740.ps1
根据任务历史记录:任务已启动、操作已启动、已创建任务流程、操作已完成、任务已完成。我浏览了网站上的一些具有相同“问题”的各种链接,但它们似乎都有某种我没有的变量。我也尝试了一些提到的解决方案,认为它们可能有些相关,但可惜没有任何效果。我什至尝试删除我的计划任务并按照此处所述重置它:http://blogs.technet.com/b/heyscriptingguy/archive/2012/08/11/weekend-scripter-use-the-windows-task-scheduler-to-run-a-windows-powershell-script.aspx
有没有人遇到过此类错误或知道如何绕过此问题?
疑难解答:
我决定尝试通过计划任务调用 .bat 文件。我创建了一个简单的文件,它将当前日期/时间回显到受监控的文件夹。手动运行文件并通过 4740 事件触发的任务获得了预期的结果。将 .bat 文件改为手动调用 .ps1 文件。当被 4740 事件触发时,.bat 将不再运行。
【问题讨论】:
-
感谢@Amit 的提醒,尽管问题在没有受到批评或与印刷错误相关的情况下得到解决。
-
我明白了。我在这里提到这一点只是因为我打算在将来使用这个问题作为说明/参考,因为我将不可避免地向
1 Picture > 1 Kiloword的人解释。除了可能导致此类问题的 runas 帐户之外,任务计划程序中还有许多其他选项,您没有列出。错字是绝对相关的,因为 localsystem 和 localservice 在权利方面是截然相反的。此外,您的解决方法是在 域服务器 上永久锁定会话,这听起来确实是解决此问题的错误且不安全的方法。 -
通过完全限定 powershell.exe,我能够让脚本在任务管理器中运行,但存在同样的问题。 “C:\...\...\powershell.exe”作为程序/脚本。
标签: windows powershell scheduled-tasks