当前位置: 首页 > 知识库问答 >
问题:

Powershell脚本不通过计划任务运行

刘高峯
2023-03-14

我的域控制器上有一个小脚本,它被设置为通过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将不再运行。

共有3个答案

茹轩昂
2023-03-14

虽然你可能已经找到了解决问题的方法,但我还是要发布这篇文章来帮助其他人。我遇到了类似的问题。我基本上使用了不同的域帐户来测试和比较。该任务运行良好,并检查了“运行用户是否登录”。

有几件事需要记住并确保:

  1. 用于执行任务的帐户必须在服务器的本地安全策略下具有“登录为批处理作业”权限(或成为本地管理员组的成员)。您必须指定运行脚本/bat文件所需的帐户。
  2. 确保您输入的密码字符正确
  3. 如果您将2008 R2中的任务作为“无论用户是否登录”运行,则它们不会以交互方式运行。如果您在脚本上查找特定于用户配置文件的任何对象\资源,当任务作为powershell会话创建时,这可能会特别失败,需要该信息才能启动,否则它将启动并立即结束。作为一个例子,当运行脚本时定义$Path为“运行用户是否登录”,我指定了一个映射驱动器。当任务启动时,它会寻找该驱动器,但由于验证运行任务的用户帐户未登录,并且在脚本上,您正在引用它需要针对它工作的源\对象,因此不存在任务将只是终止。映射驱动器(\server\share)x:\vs.实际UNC路径\server\share
  4. 检查您的步骤、脚本、参数。有时即使您已经多次执行此过程,最小的部分也会产生很大的影响。我在输入密码时错过了几次一个字符,有时在构建脚本或任务时错过了一个分号。

检查此链接,希望您或其他人可以从此信息中受益:https://technet.microsoft.com/en-us/library/cc722152.aspx

苍嘉澍
2023-03-14

注:请确保您选择了创建基本任务活动,而不是创建任务活动。

我找到了以下解决方案:

1)制作电源外壳.exe以管理员身份运行

  1. 右键单击<code>powershell。exe图标
  2. 单击快捷键菜单下的属性。
  3. 点击前进按钮;检查是否选中“以管理员身份运行”

2)在“任务计划程序”窗口的“操作”窗格下,添加以下脚本作为新命令

%SystemRoot%\syswow64\WindowsPowerShell\v1.0\powershell.exe -NoLogo -NonInteractive -ExecutionPolicy Bypass -noexit -File "C:\ps1\BackUp.ps1"
秦胡媚
2023-03-14

将您的操作更改为:

powershell-noprofile-executionpolicy-bypass-file C:\path\event4740.ps1

在 Windows 2008 服务器 R2 上:在“常规”选项卡下的“任务计划程序”中 - 确保将“运行方式”用户设置为具有执行脚本所需的正确权限的帐户。

另外,我相信你已经勾选了“仅在用户登录时运行”选项。将其更改为“无论用户是否登录都运行”。保持不存储密码选项未选中,您可能需要标记“以最高权限运行”选项。

 类似资料:
  • 我尝试将Powershell脚本作为帐户作为计划任务运行,该任务运行正常,但该脚本运行不正确,因为它没有加载作为SYSTEM运行时所需的一些Citrix Powershell管理单元,而是作为我的用户帐户运行OK。 该脚本会执行检查以加载 Citrix 管理单元,但在作为 运行时,这些管理单元似乎不起作用。 我需要做什么特殊的事情才能正确加载这些管理单元 如果重要的话,我会这样调用脚本:<code

  • 我有一个包含4个命令的批处理脚本,如下所示 当我双击批处理文件时,它运行得很好。当我尝试从命令提示符运行批处理文件时,它没有看到要删除的. csv文件,我不确定这是为什么,但我认为这对我的目的并不重要。 当我从task scheduler手动运行任务时,它会截断数据库中的表并删除现有的csv文件,但没有创建新文件,这使我相信它会卡在.vbs文件上。 我试着用。vbs脚本,并将路径传递给。xls和。

  • 我创建了一个使用文件系统观察器并创建作业的脚本。当文件被添加到一个文件夹时,它 重命名新添加的文件 将文件移动到新目标位置 开始下游工作流 一旦完成,工作就结束了。 我想做的是使用Windows任务计划程序来检查作业完成后立即再次运行。这样,如果一个人丢弃了一个文件夹,另一个人也可以做同样的事情。 此外,如果有其他方法来完成这项工作,我很乐意使用它。 我已尝试安排任务运行,但最小增量为1分钟 我希

  • 我有一个PowerShell (PS)脚本,我想在每天早上5:00执行它。我想让它自动运行,所以我通过任务调度器(运行Windows 7旗舰版和SP1,64位)来安排它。作为一个测试,我写了一个简单的PS脚本,它只是将时间戳附加到一个文本文件中。它运行——我可以看到PowerShell窗口打开了,它写出了PS日志——但它没有写入文本文件。 脚本在命令行和PS shell中运行良好。无论是从计划时间

  • 问题内容: 不知道是否有人遇到过这种情况,但是我会提出有关故障排除和/或替代方法的建议。 我有一台Windows 2008服务器,在该服务器上运行多个计划任务。这些任务之一是一个python脚本,该脚本使用pscp登录linux框,检查是否有新文件,如果有新文件,则将它们复制到C:驱动器的本地目录中。我还在关键点处也将一些日志记录到脚本中,并且正在使用。 我使用变量构建了命令,然后使用它来执行命令

  • > 我需要在执行前一个任务后以不同的延迟一个接一个地运行计划的任务。示例。有一个任务列表和延迟列表。 现在我需要运行task1通过100ms,task2在task1之后通过9ms,task3在task2之后通过22ms等等。 我正在使用javafx。任务可以使用一些UI更新方法,例如更改节点位置。这迫使我使用平台。runLater()方法,因为如果不这样做,则会出现异常“Not on FX app