Укажите местоположение с помощью скрипта планировщика задач

#powershell #scheduled-tasks

Вопрос:

Я пытаюсь написать сценарий PowerShell, который будет ежедневно активировать другой сценарий. То, что у меня есть, — это:

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

Он не работает, потому что не может найти файл. Каталог PowerShell по умолчанию является корневым каталогом пользователя, поэтому я не знаю, так ли это, хотя я пытался использовать полный путь к файлу? Или это связано с тем, откуда выполняется запланированная задача? Местоположение говорит, и я, похоже, не могу это изменить, даже в приложении планировщика задач. Я уже несколько дней гуглю в Интернете и не могу этого понять. У кого-нибудь есть какие-нибудь идеи? Я работаю над Windows 10 Pro.

Комментарии:

1. Похоже, что вы выполняете задачу как пользователь, у которого нет доступа к C:UsersUserNameDesktop пути. Вероятно, потому, что это учетная запись службы, у которой нет пути к рабочему столу. Лучше сохраните файл сценария прямо на диске C: или создайте специальную подпапку для сценариев запланированных задач и убедитесь, что пользователь, выполняющий задачу, имеет права на чтение/выполнение в этой папке. Я бы также изменил строку аргумента на "-File 'C:ScriptFolderScript.ps1'"

2. Это не так, поскольку я запускаю его от имени администратора, и он находится на рабочем столе администратора. Однако я попробовал то, что вы предложили, и ничего не изменилось.

Ответ №1:

Девушка-суфлер13,

Обновлено и протестировано:

 $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:windowssystem32windowspowershell"  
                             "v1.0powershell.exe"   '"' ;
            Argument = "-file `"G:BEKDocsScriptsMiscGet-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, и он не включает Win10 в качестве допустимого значения для совместимости, поди разберись, поэтому я сделал резервную копию до Win8. Вы также можете просто не использовать аргумент совместимости и принять все значения по умолчанию.

Код теперь полностью протестирован, извините, я забыл сказать вам, чтобы вы заменили переменную $TaskName значением или добавили переменную, как теперь показано в скорректированном коде.

ХТХ

Комментарии:

1. Это дает мне ошибку синтаксического анализа в строке 9, и я не могу понять, почему…

2. @soufflegirl13 Замените запятую на точку с запятой ; в строке 9: "v1.0powershell.exe" '"' ;

3. Спасибо! Я пробовал это, но теперь это дает мне кучу ошибок. «Свойство» Запрещать запуск игровых автоматов», «Останавливать запуск игровых автоматов», «Остановить вход» не может быть найдено на этом объекте. Убедитесь, что свойство существует и может быть установлено.» и «REgister-ScheduledTask @RSTargs Не может проверить аргумент параметра «Настройки». Аргумент равен нулю или пуст. Укажите аргумент, который не является нулевым или пустым, а затем повторите попытку выполнения команды».

4. soufflegirl13, затем просто удалите эти строки из верхней части сценария.

5. @RetiredGeek Я пробовал это, но, к сожалению, затем он жалуется на описание, а затем на настройки, а затем на имя задачи, а затем, наконец, просто говорит, что доступ запрещен после их удаления. Я серьезно думаю, что что-то не так с модулем в моей системе или что-то в этом роде.