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