【问题标题】:Specify location with Task Scheduler script使用任务计划程序脚本指定位置
【发布时间】:2021-07-15 04:29:00
【问题描述】:

我正在尝试编写一个 PowerShell 脚本,该脚本将每天激活另一个脚本。我所拥有的是:

$Sta = New-ScheduledTaskAction -Execute "powershell.exe" -argument "C:\Users\UserName\Desktop\Script.ps1"
$Stt = New-ScheduledTaskTrigger -Daily -At 3am
Register-ScheduledTask Task1 -Action $Sta -Trigger $Stt

它无法正常工作,因为它找不到文件。 PowerShell的默认目录是用户的根目录,所以我不知道是不是这样,即使我尝试使用文件的完整路径?还是由于计划任务的运行位置?位置说\,我似乎无法改变它,即使在任务计划程序应用程序中也是如此。我已经在谷歌上搜索了几天,我无法弄清楚。有人知道吗?我正在使用 Windows 10 专业版。

【问题讨论】:

  • 您似乎以无权访问C:\Users\UserName\Desktop 路径的用户身份运行任务。可能是因为这是一个没有桌面路径的服务帐户。最好将脚本文件直接存储到 C:\ 驱动器或为您的计划任务脚本创建一个专用子文件夹,并确保运行任务的用户对该文件夹具有读取/执行权限。我还将参数字符串更改为"-File 'C:\ScriptFolder\Script.ps1'"
  • 不是这样,因为我是以管理员身份运行的,它在管理员的桌面上。我尝试了您的建议,但没有任何变化。

标签: powershell scheduled-tasks


【解决方案1】:

Soufflegirl13,

更新和测试:

$TaskSet = New-ScheduledTaskSettingsSet -Compatibility Win8
$TaskSet.DisallowStartIfOnBatteries = $True
$TaskSet.StopIfGoingOnBatteries     = $True
$TaskSet.IdleSettings.StopOnIdleEnd = $false
#Adjust the following two lines to meet your requirements
$TaskDesc = "Retrieve the status of HyperV" 
$TaskName = "Task1 - or whatever you want here"

$Stt = New-ScheduledTaskTrigger -Daily -At 3am

#Adjust the -file parameter to point to your script
$TAArgs = @{Execute  = '"' + "c:\windows\system32\windowspowershell" +
                             "\v1.0\powershell.exe" + '"' ;
            Argument = "-file `"G:\BEKDocs\Scripts\Misc\Get-HyperVStatus-V-3.ps1`""                  }
                             
$TaskAction = New-ScheduledTaskAction @TAArgs

$RSTArgs = @{Action      = $TaskAction
             TaskName    = "$TaskName"
             Trigger     = $Stt
             User        = "$env:USERDOMAIN\$env:username"
             RunLevel    = "Highest"
             Description = "$TaskDesc"
             Settings    = $TaskSet}

Register-ScheduledTask @RSTargs

我发现强制在 powershell 文件规范周围加上引号解决了一些问题。如果前一个不起作用,您可能想围绕脚本名称进行尝试。

当然可以根据您的要求调整任何设置。此外,我之前没有使用此基本代码设置触发器,但我根据 Register-ScheduledTask 的文档对其进行了调整,因此它应该可以工作。

更新说明:

我检查了 New-ScheduledTaskSettingsSet cmdlet 的文档,它没有将 Win10 作为有效的兼容性值包括在内,请看图,所以我将其退回到 Win8。您也可以不使用 Compatibility 参数并接受它的默认值。

代码现在已经过全面测试,抱歉我忘了告诉你用一个值替换 $TaskName 变量或添加变量,如调整后的代码所示。

HTH

【讨论】:

  • 这在第 9 行给了我一个 ParserError,我不知道为什么......
  • @soufflegirl13 在第 9 行将逗号更改为分号 ;"\v1.0\powershell.exe" + '"' ;
  • 谢谢!我试过了,但现在它给了我一堆错误。 “在此对象上找不到属性‘DisallowStartIfOnBatteries’‘StopIfGoingOnBatteries’‘StopOnIdleEnd’。验证该属性是否存在并且可以设置。”和“REgister-ScheduledTask @RSTargs 无法验证参数“设置”的参数。参数为空或为空。提供一个不为空或空的参数,然后重试该命令。”
  • soufflegirl13,然后从脚本顶部删除这些行。
  • @RetiredGeek 我试过了,但不幸的是它然后抱怨描述,然后是设置,然后是任务名称,最后只是说在删除这些之后访问被拒绝。我严重认为我系统上的模块有问题。
猜你喜欢
  • 2017-03-17
  • 1970-01-01
  • 1970-01-01
  • 2014-01-27
  • 2017-06-21
  • 2017-11-06
  • 2023-02-07
  • 1970-01-01
  • 2018-12-02
相关资源
最近更新 更多