В этой заметке рассмотрим несколько паттернов для работы с планировщиком задач Windows средствами стандартного модуля ScheduledTasks
Обновление учетных данных для заданий которые хранят пароли
$NewTaskCreds = Get-Credential -Credential "Domain\User"
Если Get-ScheduledTask отработав не возвращает заведомо существующее задание, то на это скорее всего просто нет прав для текущей учетной записи — используйте учетку с повышенными привилегиями, или ту под которой запускается задача.
Get-ScheduledTask Test_ChangeTask -TaskPath \ |` Set-ScheduledTask -User $NewTaskCreds.UserName -Password $NewTaskCreds.GetNetworkCredential().Password
Если выдает ошибку «The user name or password is incorrect«, то вы вводите неактуальный пароль для выбранной учетной записи.
Удаленно изменить Description задачи
$task = Get-ScheduledTask -CimSession RemoteServer -TaskName "SourceTask" $task.Description = "Новое описание" $task | Set-ScheduledTask -User "$env:userdomain\Username"
Создание задачи на основе другой задачи
Можно создать задачу с параметрами родительской задачи, и точечно изменить любую часть параметров.
Если исходная задача имеет -LogonType Password, то ее можно без проблем заменить на Interactive. Но не наоборот — поменять Interactive на Password у меня не вышло.
$principal = New-ScheduledTaskPrincipal -UserID "scriptadmin" -RunLevel Highest -LogonType Interactive ( Get-ScheduledTask "SourceTask" ) |` % { Register-ScheduledTask -TaskName "NewTask" -Action $_.Actions -Description $_.Description -Trigger $_.triggers -Principal $principal -Force }
Так же успешно можно задать запуск задачи от учетной записи «System». Для нее не требуется ввода пароля, и ошибка не возникнет
( Конечно если у объекта компьютера будут все необходимые на это действие права, так как сетевое взаимодействие инициируется от его лица ):
$principal = New-ScheduledTaskPrincipal -UserID "System" -RunLevel Highest -LogonType ServiceAccount ( Get-ScheduledTask "SourceTask" ) |` % { Register-ScheduledTask -TaskName "NewTask" -Action $_.Actions -Trigger $_.triggers -Principal $principal -Force }