如何在Powershell作业中重新计划Powershell作业?

时间:2019-03-14 22:04:11

标签: powershell

我已经编写了以下powershell脚本,但是它不起作用。具体来说,它不会第二次重新运行脚本。我了解它需要在具有管理员权限的情况下运行。

$online = CheckIfIamOnline
 if ($online) {
     Write-Host "You are currently online."
     # DO SOMETHING HERE
 }
 else {
     Write-Host "You are currently not online.  Scheduling check for later"
     $job = Get-ScheduledJob -Name DelayedJobTesting 
     $thisScript = $PSCommandPath
     $trigger = New-JobTrigger -Once -At (get-date).AddMinutes(1)
     if ($job -eq $null)
     {
        Write-Host "Creating scheduled job"
        $job = Register-ScheduledJob -Name DelayedJobTesting -FilePath $thisScript -Trigger $trigger -
     }
     else {
        Write-Host "Updating scheduled job"
        $job | Set-ScheduledJob -FilePath $thisScript -Trigger $trigger | Format-Table -AutoSize
     }
     $job | Get-JobTrigger | Format-Table -AutoSize

 }

上面的代码是第一次工作,但是第二次却没有。我究竟做错了什么?如果首先使用“以管理员身份运行”运行,如何将其传递给正在创建的作业?我不想在脚本中放置任何凭据。

1 个答案:

答案 0 :(得分:0)

看起来像是您在触摸预定作业,它将被中断(如果正在运行)。不确定这是最好的解决方法,但是您可以尝试创建一个名称相似的新作业,然后在最后删除旧作业。我猜您还需要为脚本使用绝对路径,因为PS计划的作业是作为内联命令执行的。或者只是使用脚本块而不是文件。

 $jobName = "TestJob"
 $thisScript = "$home\Documents\sch.ps1"

 # .....

 $online = $false

 # .....

 If($online) { Write-Host "Success" } Else {

   Write-Host "rescheduling"

   $job = Get-ScheduledJob -Name "$jobName*" -ErrorAction SilentlyContinue # get old job

   $trigger = New-JobTrigger -Once -At (get-date).AddMinutes(1)
   Register-ScheduledJob -Name "$jobName$((get-date).Ticks)" -FilePath $thisScript -Trigger $trigger # create new job

   if($job) {$job.Remove($true)} # remove old job

 }