Появилась необходимость раскидать горстку заданий из Task Scheduler на горстку серверов. Помнится когда-то это можно было делать через групповые политики. И такая возможность в общем то и сейчас есть, но там теперь нельзя указывать определенную учётную запись, от имени которой должно выполняться задание, точнее УЗ с паролем (вообще то это можно обойти, вручную поправив файлы групповой политики в sysvol, но это не безопасно и топорно).
Как вы понимаете, если нужно скопировать скажем 20 заданий на 10 машин, то даже экспортируя и импортируя задания – можно сойти с ума от однотипных действий – открытия оснастки, импорта и ввода пароля. Плюс чем ближе конец этого мучения, тем больше будет вероятность что-то пропустить. А если потом задания нужно будет изменить?
Короче говоря, задача может быть выполнена при помощи небольшого скрипта PowerShell, текст которого представлен ниже:
$taskpath="\audit\"
$user="domain\scriptRunner"
$password="verysecret"
$tasks=get-ScheduledTask -taskpath $taskpath
$comps=Get-ADDomainController -filter * | Select-Object name
foreach ($comp in $comps){
if ($comp.name -ne $env:computername){
$comp.name
Get-ScheduledTask -TaskPath $taskpath -CimSession $comp.name | Unregister-ScheduledTask -Confirm:$false
foreach ($task in $tasks){
$task.taskname
$exported=export-scheduledtask -taskpath $taskpath -TaskName $task.taskname
Register-ScheduledTask -Xml $exported -cimsession $comp.name -taskname $task.taskname -User $user -password $password -TaskPath $taskpath -force
}
}
}
Тут я для примера копирую все задачи из папки audit, на все контроллеры домена в организации.
Скрипт смотрит все задачи в указанной папке выполняет экспорт задачи в XML (без сохранения на диск), затем импортирует их поочередно на каждый из компьютеров. При импорте (командлет Register-ScheduledTask) указаны имя и пароль для учётки, от имени которой должны запускаться задания.
Также обратите внимание, на строчку
Get-ScheduledTask -TaskPath $taskpath -CimSession $comp.name | Unregister-ScheduledTask -Confirm:$false
Она отчищает указанную папку с заданиями на целевом сервере. Если вам это не надо – удалите или закомментируйте её.
Скрипт доступен на GitHub.
Когда вам потребуется менять пароль учётной записи для заданий планировщика, рекомендую посмотреть этот пост.