如何使用Windows任务计划程序自动执行PowerShell脚本?


73

我有一个可以发送电子邮件的PowerShell脚本。我想每1分钟自动执行一次该脚本。如何使用任务计划程序执行此操作?

目前,我已经创建了一个任务并提供了脚本的路径。但是该调度程序会打开我的脚本,而不是执行脚本。


您正在使用哪个版本的Windows和PowerShell?
克里斯

Windows 7专业版。如何找到电源外壳版本?
AK47 2014年

只需输入$PSVersionTablePowerShell。默认情况下,PowerShell 2.0与Windows 7捆绑在一起。您可以安装Windows Management Framework 4.0来升级到PowerShell 4.0
Chris

我有安装程序,VS 2013,Powershell版本:CLRVersion = 2.0.5 ....&BuildVersion = 6.1 .....
AK47

相关的版本号是PSVersion一个。
克里斯(Chris)

Answers:


107

创建计划的任务并将操作设置为:

程序/脚本: Powershell.exe

参数: -File "C:\Users\MyUser\Documents\ThisisMyFile.ps1"


1
尝试了一下,它说它运行了脚本,但是在脚本中我已经发送了电子邮件,但从未发送过电子邮件。当我通过电子邮件手动运行脚本时
John Demetriou

1
@JohnDemetriou通常是由于执行计划任务的用户帐户而发生的。
user4317867

1
为了进一步说明@ user4317867的观点,running当我将其设置为域管理员身份运行时,我发送电子邮件的powershell脚本会无限期挂起。也就是说domain\Administrator,即使我未选中“以最高特权运行” ,也无法运行脚本。但是,我的个人域管理员帐户可以正常运行脚本。令人非常恼火的是,我的用户不会永远与公司在一起,但域管理员用户永远不会消失。
jdgregson

3
@jdgregson:对于没有绝对要求的任何事情,使用完整的admin帐户(尤其是域admin帐户)不是安全的好习惯做法,尽管您也不会使用与人相关联的帐户来正确识别。通常的建议是专门为此类任务创建一个域帐户,该域帐户仅具有那些任务所需的特权。有时这意味着拥有多个维护帐户,每个维护帐户具有不同的权限。显然,如果发生事故并且基础设施中的某人需要重建安排,请记录下来。
David Spillett

14

这是使用PowerShell 3.0或4.0-RepeatIndefinitely及更高版本的示例:

# Trigger
$middayTrigger = New-JobTrigger -Daily -At "12:40 AM"
$midNightTrigger = New-JobTrigger -Daily -At "12:00 PM"
$atStartupeveryFiveMinutesTrigger = New-JobTrigger -once -At $(get-date) -RepetitionInterval $([timespan]::FromMinutes("1")) -RepeatIndefinitely

# Options
$option1 = New-ScheduledJobOption –StartIfIdle

$scriptPath1 = 'C:\Path and file name 1.PS1'
$scriptPath2 = "C:\Path and file name 2.PS1"

Register-ScheduledJob -Name ResetProdCache -FilePath $scriptPath1 -Trigger  $middayTrigger,$midNightTrigger -ScheduledJobOption $option1
Register-ScheduledJob -Name TestProdPing -FilePath $scriptPath2 -Trigger $atStartupeveryFiveMinutesTrigger

1
-RepeatIndefinitely开关仅存在于PowerShell 4.0中,而不存在于PowerShell 3.0中
Chris


8

您不仅应该在任务计划程序中使用脚本的路径,还应该在任务计划程序中使用脚本启动PowerShell,例如

C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe -NoLogo -NonInteractive -File "C:\Path\To\Your\PS1File.ps1"

有关powershell /?这些开关的说明,请参见。

如果仍然遇到问题,则应阅读此问题


执行-NoLogo/-NonInteractive开关任何区别运行文件时?
mwfearnley

7

就我而言,我的脚本具有参数,因此我设置了:

参数-Command "& C:\scripts\myscript.ps1 myParam1 myParam2"


4

经过数小时的Internet测试和研究后,由于Jack Fruh @sharepointjack的视频使用Windows Task Scheduler计划PowerShell脚本,我终于找到了如何使用任务计划程序启动PowerShell脚本。

程序/脚本->通过powershell.exe获得完整路径

C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe

添加参数->脚本和脚本的完整路径,没有任何“”。

开始于(可选)->脚本所在的目录,没有任何“”。


4

您可以使用Unblock-File cmdlet取消阻止执行此特定脚本。这样可以防止您出于安全考虑而进行任何永久性的策略更改,而这些更改可能是您不希望的。

Unblock-File path_to_your_script

资料来源:Unblock-File


0

没有发布的解决方案对我有用。解决方法,该方法有效:

创建一个run.bat并放入里面 powershell.exe -file "C:\...\script.ps1"

然后将“操作”设置为“程序/脚本”: "C:\...\run.bat"


-1
  1. 打开创建的任务计划程序

  2. 切换到“操作”标签,然后选择您创建的“操作”

  3. 在“编辑”部分中,使用浏览器可以在system32 \ WindowsPowerShell \ v1.0文件夹中选择powershell.exe。

       Example -C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
    
  4. 接下来,在“添加参数” -File参数中,将脚本文件路径粘贴到系统中。

        Examplec:\GetMFAStatus.ps1
    

该博客可能会帮助您使用Windows Task Scheduler自动执行Powershell脚本


-2

在大量搜索无济于事之后,我也无法启动脚本。否-ExecutionPolicy,没有命令,没有文件,并且“”和“之间没有区别。

我只是将在powershell中运行的命令放在参数选项卡中:./scripts.ps1 parameter1 11 parameter2 xx依此类推。现在,调度程序可以工作了。程序:Powershell.exe 开始于:C:/location/of/script/

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.