как перепланировать работу powershell в рамках powershell? - PullRequest
0 голосов
/ 15 марта 2019

Я написал следующий скрипт 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 голосов
/ 15 марта 2019

Похоже, что если вы дотрагиваетесь до запланированного задания, оно будет прервано (если выполняется).Не уверен, что это лучший обходной путь, но вы можете попытаться создать новую работу с похожим именем, а затем удалить старую в конце.Я думаю, вам также нужно использовать абсолютный путь для вашего скрипта, потому что запланированное задание 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

 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...