Попробовал — не помогло. Но, спасибо.
Добавлено через 6 минут
Ну и методом проб и ошибок, решил проблему следующим образом:
Помогла мне утилита PsService скачанная отсюда
Скачал значит, разархивировал, скопировал нужные мне(PsService.exe и PsExec.exe) в папку «C:WINDOWSsystem32» (иначе будет выпадать ошибка «
не является внутренней или внешней командой, исполняемой программой или пакетным файлом
«).
После чего, создал задание планировщика у себя, с запуском батника такого содержания:
Код
psservice \имя удаленного ПК -u имя админ учетки -p пароль админ учетки setconfig shellhwdetection auto psservice \имя удаленного ПК -u имя адми учетки -p пароль админ учетки start shellhwdetection psservice \имя удаленного ПК -u имя адми учетки -p пароль админ учетки start stisvc
ну, то есть например, имя удаленного пк в моем случае reserve, имя адми учетки(например) admin и пароль(например) — admin123
следовательно, все должно выглядить вот так:
Код
psservice \reserve -u admin -p admin123 setconfig shellhwdetection auto psservice \reserve -u admin -p admin123 start shellhwdetection psservice \reserve -u admin -p admin123 start stisvc
Первая строка переводит службу(в моем случае «Определение оборудования оболочки«) в тип запуска «Авто» (т.к. она постоянно отваливалась у меня в тип запуска «Отключено«);
Вторая строка — запуск непосредственно службы(название службы shellhwdetection, название службы смотреть можно двумя способами:
1. Пуск — Панель Управления — Администрирование — Службы — находим нужную, дальше либо двойным щелком мыши открываем службу, либо правой кнопкой мыши нажимаем, и выбираем «Свойства«, после чего откроются свойства службы, где вверху будет написано
Имя Службы
)
2. Пуск — нажимаете правой кнопкой мыши на Мой Компьютер(если win XP) или Компьютер(если win 7 и выше) и выбираете «Управление«, дальше переходим в «Службы и приложения» и еще дальше в «Службы» — находим нужную, дальше либо двойным щелком мыши открываем службу, либо правой кнопкой мыши нажимаем, и выбираем «Свойства«, после чего откроются свойства службы, где вверху будет написано
Имя Службы
).
вот это
Имя Службы
, которое нашли и нужно вводить в строку;
Ну и третья строка запуск тоже службы, но которая зависит от первой(которую запускали во второй строке), следовательно и запускается только после запуска первой службы.
Если нужно запустить только одну службу достаточно оставить только две первые строки. Если нужно больше, чем 2 службы, то аналогичным образом, как добавлена третья строка, добавлять и 4, 5 и т.д.
Если же последующие службы тоже с типом запуска — Отключено, то нужно будет перед запуском службы написать строку по примеру первой, только с именем нужной службы.
В общем всё работает, рад как ребенок.
Если будут вопросы — в ЛС.
Тему можно закрывать.
Запуск приложения с правами администратора через Планировщик задач
Переходим к самому интересному способу.
Если есть приложение, которое Вы постоянно запускаете, и оно получено от надёжного производителя ПО,
например, это приложение Windows — можно упростить запуск. Создание ярлыка для нужной программы
не занимает более 2-х минут и это позволит избавиться от лишних действий в дальнейшем.
Запускаем планировщик заданий:
Пуск —> Все программы —> Стандартные —> Служебные —> Планировщик заданий
и нажимаем «Создать задачу»:
Планировщик заданий
Указываем Имя для новой задачи и ставим флажок «Выполнять с наивысшими правами»:
Установите флажок «Выполнять с наивысшими правами»
Переходим на вкладку Действия, нажимаем «Создать», в следующем окне нажимаем «Обзор»:
Создание действия
Указываем путь к нужному приложению и нажимаем «Открыть»:
Укажите путь
Нажимаем «ОК»:
Нажмите «ОК»
И ещё раз «ОК»:
Нажмите «ОК»
Закрываем планировщик и переходим к созданию ярлыка.
Чтобы создать ярлык на рабочем столе, щёлкаем правой клавишей мыши, выбираем «Создать» —> «Ярлык»:
Создайте ярлык на рабочем столе
В поле Расположение объекта вводим: schtasks /run /tn cmd_admin, где cmd_admin — имя созданной нами задачи.
Если имя содержит пробелы, его необходимо указывать в кавычках.
Выберите элемент
Задаем название ярлыка:
Создайте название ярлыка
Ярлык создан и готов к использованию.
Чтобы сменить значок — нажмите правой клавишей мыши по ярлыку, выберите «Свойства»:
Выберите «Свойства»
Перейдите на вкладку «Ярлык» и нажмите «Сменить значок»:
Сменить значок
«Обзор…»
Сменить значок
Указываем путь к программе:
Укажите путь к программе
Выбираем нужный значок и закрываем оба окна кнопкой «ОК»:
Выберите значок
Ярлык на рабочем столе
Теперь запуск нужного приложения от имени администратора выполняется двойным щелчком
по созданному ярлыку, при этом запрос UAC не отображается и безопасность остается в сохранности.
- Remove From My Forums
Не могу заставить работать планировщик
-
Вопрос
-
Есть необходимость выполнять планировщиком задание от имени пользователя, учётная запись которого присутствует, но вход в систему не произведён. Никак не могу этого добиться. Если планировщик настроен как показано ниже, то всё
работает, но для этого надо под этим пользователем войти в систему (локально или по терминалу).Если же настроить планировщик «Выполнять вне зависимости от регистрации пользователя», то задание не выполняется в журнале отображается сообщение что задание запущено и «висит часами» без каких-либо ошибок или дальнейших сообщений.
Пробовал расставлять различные галочки «Не сохранять пароль…», «Выполнять с наивысшими …..» — ничего не меняется. В приведённых выше примерах автор задания тот пользователь от имени которого и надо выполнить
задание, делал автором «Администратора», создавая задание от его имени, также не работает.
im2002
Ответы
-
У пользователя есть права в Local Security Policy «Log on as a batch job»/»Вход в качестве пакетного задания»?
И еще — у CONS.EXE ключ /YES стоит?-
Изменено
20 апреля 2014 г. 18:49
-
Помечено в качестве ответа
im20002
21 апреля 2014 г. 4:58
-
Изменено
Перейти к содержимому
Вы можете запустить приложение или программу при входе в систему с помощью Планировщика заданий в Windows 10. Планировщик заданий — это мощный встроенный инструмент, который позволяет автоматизировать рутинные задачи на вашем устройстве. С его помощью вы можете заставить любое приложение запускаться по расписанию. Вы также можете использовать планировщик задач для запуска программ при наступлении определенного события.
Планировщик заданий
имеет графическую версию MMC (taskschd.msc), которая является наиболее популярным инструментом управления задачами. Планировщик заданий может отслеживать различные системные события и закреплять за ними задачи. Когда происходит событие, автоматически запускается связанное приложение. В этой статье будет подробно показано, как создать задачу в Планировщике заданий Windows 10 для запуска приложения или сценария при входе в систему для определенных или всех пользователей.
Как запустить программу при входе в систему из Планировщика заданий
- Нажмите клавиши Win + R на клавиатуре и введите
taskschd.msc
в поле «Выполнить», затем нажмите Enter. - На левой панели выберите Библиотека планировщика заданий.
- На правой панели нажмите «Создать задачу» в разделе «Действия».
- На вкладке Общие укажите желаемое имя для вашей задачи, например Моя задача входа в систему.
- По умолчанию задача будет использовать права текущего пользователя. Если вместо этого вы хотите запустить её для всех пользователей, нажмите кнопку «Сменить пользователя или группу» и укажите нужного пользователя или группу в следующем диалоговом окне. Нужно выбрать группу «Пользователи», чтобы задача была доступна всем пользователям вашего компьютера.
- Перейдите на вкладку «Триггеры» и нажмите кнопку «Создать …».
Выберите При входе в систему из раскрывающегося меню «Начать задачу» диалогового окна «Новый триггер». - Выберите «Любой пользователь», чтобы задача выполнялась для всех пользователей. Кроме того, можно выбрать конкретного пользователя, для которого будет выполнять задача, использую опцию «Определенный пользователь» и кнопку «Сменить пользователя».
- Нажмите кнопку ОК, чтобы закрыть диалоговое окно «Новый триггер» и создать триггер входа в систему для своей задачи.
- Теперь перейдите на вкладку «Действия» и нажмите кнопку «Создать …».
- Выберите Запуск программы и укажите полный путь к исполняемому (*.ехе) или пакетному файлу (*.cmd), который вы хотите запустить при входе в Windows 10, и его аргументы командной строки (если они нужны) и нажмите ОК.
- Наконец, переключитесь на вкладку «Условия» и снимите флажок «Запускать только при питании от электросети». Это важно для ноутбуков, поскольку задача не будет запущена, когда ваше устройство работает от батареи.
- Нажмите ОК в окне «Создать задачу». Теперь вы увидите новую задачу в библиотеке планировщика заданий.
Готово! Теперь можно закрыть Планировщик заданий.
Примечание: На шаге 5 вы определяете права доступа для задачи, то есть от имени какого пользователя создаётся задача, и именно этот пользователь сможет в дальнейшем удалить или отключить эту задача. На шаге 8 вы указываете, для какого именно пользователя будет запускаться задача.
💡Узнавайте о новых статьях быстрее. Подпишитесь на наши каналы в Telegram и Twitter.
Судя по тому, что вы читаете этот текст, вы дочитали эту статью до конца. Если она вам понравилась, поделитесь, пожалуйста, с помощью кнопок ниже. Спасибо за вашу поддержку!
Вы тут: Главная → Windows → Как выполнять задачи с полными правами обычным пользователем без ввода пароля администратора
В прошлый раз я показал, как выполнять команды и скрипты от имени системы при наличии прав администратора. Сегодня я объясню, как запускать административные задачи, не имея полных прав.
Это решение родилось у меня экспромтом в ответ на вопрос в чате инсайдеров. Я подкинул идею, а участник чата легко реализовал ее самостоятельно. Сегодня я подробно разберу подход и решение. И нет, оно не про утилиту AdmLink или runas /savecred
.
[+] Сегодня в программе
Зачем такое может понадобиться
Иногда в контролируемой среде нужно предоставить возможность обычным пользователям запускать что-то с правами администратора или от имени системы. Например, без полных прав невозможно управление состоянием устройств.
Возьмем реальный пример участника чата. Он единственный администратор на семейном ноутбуке с сенсорным экраном, а остальные члены семьи работают с обычными правами. Нужно дать им возможность включать и отключать сенсорный экран, потому что кого-то путают случайные касания дисплея.
С тем же успехом это могла быть камера ноутбука и разный уровень «паранойи» у членов семьи. Также, потребность в таком решении может возникнуть, если сбой устройства (например, сетевой карты или мыши) лечится его перезапуском, а перезагружать систему для этого нецелесообразно.
Предупредительные выстрелы
Когда вы даете пользователю возможность запускать задачи с полными правами, есть вероятность отдать ему контроль над системой вне зависимости от предпринятых мер предосторожности. Мне неизвестны уязвимости моего решения, но это не значит, что их нет. Вы действуете на свой страх и риск.
- Обычно, при постановке такой задачи сразу вспоминают AdmiLink и команду
runas /savecred
. AdmiLink – стороннее решение, а мой подход использует только встроенные возможности Windows. В свою очередь runas дает пользователю возможность запускать с сохраненными учетными данными любую задачу, нежели только предусмотренную администратором. - Мое решение задействует встроенные возможности Windows, но не является эксплуатацией уязвимостей. В качестве администратора вы своими руками создаете все необходимые условия для запуска, поэтому надо подстраховаться↓
- Я категорически не рекомендую этот подход для запуска интерактивных приложений, хотя в рамках инструкций статьи он и не должен работать. Как правило, у приложений есть диалог Открыть / Сохранить как, откуда легко запускается командная строка с правами администратора или системы, а дальше все что угодно. Запуск скрипта несет меньше риска.
- Скрипт для выполнения административной задачи должен находиться в расположении, на которое у пользователя нет прав на запись. Это может быть профиль администратора, системная папка или корень диска. В принципе, годится любое расположение при условии, что для скрипта установлен высокий уровень целостности.
- У пользователя не должно быть возможности изменять автономную систему. Это решается шифрованием диска, паролем на BIOS, запретом загрузки с внешних носителей, опечатыванием корпуса ПК и т.д.
Алгоритм решения
Задача решается в два хода с помощью планировщика заданий.
- Администратор создает в планировщике задание, которое запускается с полными правами при появлении в журнале заданного события и выполняет команду или скрипт.
- Пользователь выполняет команду, создающую событие в журнале. Для этого не нужны полные права.
В результате задание срабатывает по событию. Все счастливы!
Реализация решения
Плясать надо от события, с него и начну.
Шаг 1 — Создание события в журнале
Поскольку действие пользовательское, нужна максимально простая реализация.
Я выбираю ярлык на запуск команды – его можно запускать мышью и сочетанием клавиш.
Создать событие можно командлетом PowerShell Write-Eventlog, но проще задействовать встроенную утилиту eventcreate. Она создает в указанном журнале событие с нужным номером, источником и описанием.
eventcreate /L Application /T Information /ID 777 /SO outsidethebox /D "Think outside the box!"
Если источник новый, как в этом примере, сначала зарегистрируйте его в системе, однократно выполнив команду от имени администратора. Для пользователя создайте на рабочем столе новый ярлык и вставьте туда команду. Она создает в журнале «Приложения» информационное событие 777
от источника outsidethebox
с описанием Think outside the box!
Шаг 2 — Создание задания в планировщике
Задание, выполняющееся по событию, легко создается в графическом интерфейсе планировщика (примеры создания из консоли ниже). Поэтому здесь я сфокусируюсь на нюансах, относящихся к моему решению.
Команда в задании
Я не могу знать, какую команду вы захотите выполнять по событию. Допустим, из корня системного диска выполняется скрипт PowerShell RunAsAdmin.ps1
(изменять его смогут только пользователи с полными правами).
В PowerShell от имени администратора выполните:
$script = "C:RunAsAdmin.ps1" New-Item -ItemType File -Path $script #выполнить если файл не в корне системного диска #icacls $script /setintegritylevel high #https://www.outsidethebox.ms/14318/#_Toc343199595
В запланированном задании на вкладке Действия укажите такие параметры:
- Команда/скрипт:
powershell
- Аргументы:
-ExecutionPolicy Bypass -WindowStyle Hidden -NoProfile -file C:RunAsAdmin.ps1
Учетная запись для запуска задания
В зависимости от ваших целей, вам нужно настроить запуск задания от имени администратора или системной учетной записи.
- На вкладке Общие установите переключатель Выполнять для всех пользователей.
- Для запуска от имени:
- администратора установите флажок Выполнять с наивысшими правами, затем нажмите ОК и введите пароль своего аккаунта.
- системы нажмите Изменить и введите SYSTEM или СИСТЕМА в зависимости от локализации, затем дважды нажмите OK.
Примеры скриптов PowerShell
Конечно, скрипт может выполнять по событию что угодно. Но поскольку статья в контексте устройств, я приведу конкретные примеры, чтобы придать решению законченный вид.
Управление состоянием устройства
Я уже показывал работу с модулем PNPDevice. Здесь я для разнообразия разберу отключение и включение камеры.
Выполнив Get-PNPDevice в PowerShell от имени администратора, вы увидите список всех устройств. Ориентируясь на их классы и имена, вы легко можете вывести ИД устройства и его статус.
Get-PnpDevice | Where-Object Class -eq Camera | Format-List FriendlyName,InstanceId,Status FriendlyName : Integrated Camera InstanceId : USBVID_5986&PID_02D2&MI_007&153E4771&0&0000 Status : OK
У отключенного устройства будет статус Error
. Теперь можно менять состояние устройства в зависимости от текущего статуса с помощью командлетов Enable-PNPDevice и Disable-PNPDevice. Если статус OK – выключаем, иначе – включаем.
$id = "USBVID_5986&PID_02D2&MI_007&153E4771&0&0000" if ((Get-PNPDevice -InstanceId $id).Status -eq 'OK') { Disable-PNPDevice -InstanceId $id -Confirm:$False } else {Enable-PNPDevice -InstanceId $id -Confirm:$False}
Создание запланированного задания с триггером по событию
Пожалуй, самый простой способ — создать задание вручную, а для автоматизации — экспортировать его в XML и импортировать с schtasks или командлетом PowerShell Register-ScheduledTask.
Register-ScheduledTask -Xml "C:temprunasadmin.xml" -TaskName "RunAsAdmin"
Чтобы создать задачу из консоли, придется немного разобраться с синтаксисом XPath. Ниже пример команды schtasks, создающий в планировщике задание, которое будет выполняться от имени системы при появлении в журнале приложений события 777
от outsidethebox
.
SCHTASKS /Create /TN "RunAsAdmin" /TR "powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -NoProfile -file C:RunAsAdmin.ps1" /SC ONEVENT /RU SYSTEM /EC Application /MO "*[System[Provider[@Name="outsidethebox"] and (EventID=777)]]"
Что же касается PowerShell, я уже показывал создание запланированных заданий. С триггерами там все очень мутно, и создание триггера по событию требует отдельного разбора.
#Переменные $system = "NT AUTHORITYSYSTEM" #Создание задания $taskname = "RunAsAdmin" #Общие: выполнять от имени системы вне зависимости от входа $principal = New-ScheduledTaskPrincipal -UserId $system -LogonType ServiceAccount #Триггер по событию $trigger.Enabled = $true $trigger.Subscription = '<QueryList> <Query Id="0" Path="Application"> <Select Path="Application">*[System[Provider[@Name='outsidethebox'] and (EventID=777)]]</Select> </Query> </QueryList>' #Параметры: запускать при работе от батареи; запускать немедленно если пропущено $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -StartWhenAvailable #Команда... $execute = "powershell" #... и ее параметры командной строки $argument = "-ExecutionPolicy Bypass -WindowStyle Hidden -NoProfile -file 'C:RunAsAdmin.ps1'" #Действие: "команда + параметры командной строки" $action = New-ScheduledTaskAction -Execute $execute -Argument $argument #Создать задание в планировщике Register-ScheduledTask -TaskName $taskname -Action $action -Trigger $trigger -Settings $settings -Principal $principal -Force #Для запуска от имени администратора измените $principal, а в конце команды↑ добавьте: -RunLevel Highest
В случае с произвольными событиями и источниками, заменяйте источник и событие в моих примерах или действуйте так:
- Если вы используете свое событие, создайте хотя бы одно утилитой eventcreate и перезапустите eventvwr.msc.
- Перейдите в журнал, в котором создано событие, отфильтруйте его по источнику и событию (можете указать несколько источников/событий).
- В фильтре перейдите на вкладку XML и скопируйте запрос. Затем отредактируйте его, заменяя все одинарные кавычки на двойные (например, в названии провайдера).
- Подставьте исправленный запрос в переменную
$trigger.Subscription
(PowerShell) или в параметры/EC
и/MO
(schtasks) . Если при выполнении скрипта возникают ошибки триггера, попробуйте вытянуть запрос в одну строку, т.е. уберите переносы строк и лишние пробелы
Заключение
В блоге планировщик играет заметную роль почти в двух десятках статей! И в очередной раз с его помощью легко решается сложная на вид задача.
На мой взгляд, это – самый простой подход к решению в домашних условиях, но не единственный. Дома и в организации задачу можно решить на PowerShell, используя технологию Just Enough Administration (JEA). Ссылки для самостоятельного изучения:
- Just Enough Administration (документация)
- Secure Your Powershell Session with JEA and Constrained Endpoints
А у вас возникала необходимость запускать что-либо от имени администратора, не имея полных прав? Напишите в комментариях, как вы решали такую задачу.
- 23.08.2020
- 38 766
- 11
- 14
- 13
- 1
- Содержание статьи
- Введение
- Создание задачи
- Дополнительные настройки
- Примеры настройки Планировщика
- Ежедневный запуск задачи
- Запуск задачи через день
- Отложенный ежедневный запуск задачи
- Ежедневный запуск задачи до определенной даты с последующим удалением задачи из Планировщика
- Запуск задачи в разные дни недели в разное время
- Ежеминутный запуск задачи в рабочее время в рабочие дни
- Ежемесячный запуск задачи
- Тестовый запуск задачи
- Управление заданиями Планировщика задач по сети
- Комментарии к статье ( 11 шт )
- Добавить комментарий
Введение
Эта статья рассказывает о возможностях стандартного Планировщика Windows.
На примерах показано как запланировать запуск той или иной программы в определенное время. Рассказано о том, как правильно составить расписание запуска программы в определенные дни, в определенное время.
Планировщик будет незаменимым и удобным инструментом если необходимо запускать какие-то приложения, которые выполняют рутинные операции и не требуют присутствия пользователя. Это могут быть операции резервного копирования, обновления данных, дефрагментация и т.д.
На примере будет показано создание задания со сложным расписанием запуска. Статья содержит массу скриншотов с подробными описаниями.
Создание задачи
Первое, на что следует обратить внимание еще до создания задач — запущена ли служба «Планировщик заданий». Эта служба могла быть отключена при настройке системных служб для освобождения памяти в то время, когда использование Планировщика задач не было нужно. Теперь, если запланированные задания будут выполняться регулярно, то этот сервис надо переключить в автоматический режим запуска.
Чтобы убедиться, что сервис запущен, зажмите поочередно клавиши Win + R, и в открывшемся окошке «Выполнить», нужно набрать команду services.msc
и нажать кнопку «ОК». Откроется окно, показанное на рисунке 1.
Рисунок 1.
Найдите службу «Планировщик заданий» и убедитесь, что в столбце «Состояние» у нее «Выполняется» («Работает» в старых версиях Windows), а в столбце «Тип запуска» — «Автоматически». Если это не так, то дважды щелкните по имени службы и в открывшемся окне скорректируйте значения на те, которые указаны выше (для этого нужно иметь привилегии администратора, т. е. Ваша учетная запись должна быть из группы Администраторы).
После того, как служба запущена и тип ее запуска скорректирован на автоматический, служба будет стартовать при загрузке системы и задания буду выполняться в соответствии с расписанием.
Теперь создадим задачу.
Для этого, опять поочередно зажмем клавиши Win + R, и введем команду taskschd.msc
, после чего нажмем «ОК». Откроется окно, показанное на рисунке 2.
Рисунок 2.
В правой панели данного окна нажмем на «Создать задачу…». Откроется окно, показанное на рисунке 3.
Рисунок 3.
В поле «Имя» нужно указать название этого задания, которое будет отображаться в окне Планировщика. Название может быть любым. Присвойте заданию такое имя, чтобы потом, при открытии Планировщика, можно было сразу вспомнить, что делает это задание. В данном примере я назвал задание «Тестирование Планировщика». После этого, нажимаем «Далее». Откроется окно, показанное на рисунке 4.
Рисунок 4.
Здесь нужно выбрать период запуска этого задания. Возможны следующие варианты:
- Ежедневно. Задание будет запускаться ежедневно, либо только по рабочим дням, либо через несколько дней в указанное время. Все эти параметры можно будет выбрать в следующем окне, о чем пойдет речь ниже.
- Еженедельно. В следующем окне можно будет указать каждую ли неделю нужно запускать задание и выбрать дни недели, по которым задание будет запущено в определенное время.
- Ежемесячно. Далее можно будет указать в какие месяцы года надо запускать задание и выбрать по каким числам месяца или по каким дням месяца в определенное время задание будет запущено.
- Однократно. В следующем окне мастера можно будет выбрать дату и время запуска задания. Больше это задание выполняться не будет.
- При загрузке компьютера. Следующего окна при выборе этого варианта нет, что логично, т.к. при таком типе запуска задание будет выполняться каждый раз при загрузке компьютера. Данный тип запуска не требует входа пользователя, задание будет запущено от имени того пользователя, которое будет нужно указать в следующем окне.
- При входе в Windows. Этот тип запуска похож на предыдущий с тем отличием, что задание будет выполнено только когда пользователь войдет в Windows, т.е. введет свои логин и пароль.
Теперь разберем эти типы запуска заданий более подробно. После нажатия кнопки «Далее» будет выведено окно, в котором нужно указать дополнительные параметры расписания для запуска задачи. Исключение — два последних типа запуска, когда задание исполняется при загрузке компьютера или при входе пользователя. Итак, введите название задачи и выберите один из типов запуска, затем нажмите кнопку Далее. В зависимости от того, какой тип запуска был выбран, будут предложены те или иные настройки расписания запуска задачи.
Рисунок 5.
Ежедневно
При ежедневном типе запуска есть возможность выбора запускать ли задание ежедневно, либо запускать задание с периодичностью, например, один раз в три дня. В этом же окне нужно выбрать время запуска задания. Поле «Начать» позволит отложить первый запуск задания до определенной даты, т.е. если сегодня первое число месяца, а «Начать» установлена на 10-е, то задача начнет выполняться с десятого числа, не смотря на то, что ее запуск запланирован как ежедневный.
Рисунок 6.
Еженедельно
При еженедельном типе запуска есть возможность запускать задачу по определенным дням недели, отметив галками соответствующие дни недели в окне, показанном на рисунке 7. Можно указать, что задание должно выполняться через неделю, т.е., например, первую неделю в понедельник, среду и пятницу, вторую неделю задание не выполняется, в третью выполняется в понедельник, среду, пятницу, четвертую не выполняется и т.д. Также, нужно указать время, в которое задание будет выполняться в указанные дни недели.
Рисунок 7.
Ежемесячно
При ежемесячном типе запуска задания необходимо отметить месяца, по которым будет запускаться задание и указать число, когда задание будет запущено. Обратите внимание на то, что последнее число месяца может быть 28-е, 29-е, 30-е или 31-е, поэтому, если задание необходимо выполнить в конце месяца, то его запуск лучше запланировать на первое число следующего месяца в 00:01. Если есть необходимость не указывать конкретное число для запуска задания, а запускать его только, например, по третьим пятницам указанных месяцев, то можно переключить соответствующий переключатель и выбрать из полей со списками требуемые значения.
Рисунок 8.
Однократно
При выборе однократного выполнения задания требуется указать только дату и время его запуска. Задание будет запущено в указанное время и после этого его запуск больше производится не будет. Задание из Планировщика не будет удалено, поэтому его можно будет использовать в дальнейшем, исправив дату и время запуска. Данный тип запуска задания хорошо подходит для непериодического выполнения заданий во время отсутствия пользователя за компьютером.
При загрузке компьютера
Как уже говорилось выше, при таком типе запуска задание будет выполняться при каждой загрузке компьютера, до логина пользователя.
При входе в Windows
Такое задание будет выполняться при логоне пользователя.
Выберите наиболее подходящее под требования к периодичности запуска расписание, даже если оно не полностью соответствует необходимому. Например, если задачу необходимо выполнять по рабочим дням в 21:00, а по выходным — в 19:00, то на этом этапе создания задачи следует выбрать еженедельный запуск задачи, а после ее создания скорректировать расписание нужным образом. Пример такой настройки показан на рисунке 10.
Выберите наиболее подходящее под требования к периодичности запуска расписание, даже если оно не полностью соответствует необходимому. Например, если задачу необходимо выполнять по рабочим дням в 21:00, а по выходным — в 19:00, то на этом этапе создания задачи следует выбрать еженедельный запуск задачи, а после ее создания скорректировать расписание нужным образом.
После того, как начальное расписание задано нажмите кнопку Далее. Пример открывшегося окна показан на рисунке 9.
Рисунок 9.
В данном окне нужно выбрать действие, которое будет выполнятся данной задачей. На выбор доступно три пункта:
- Запустить программу — будет выполнен указанный файл. Ограничений на формат файла нет, это может быть как исполняемый файл, так и какой-нибудь пакетный (bat, cmd и т. д.), или вообще любой другой.
- Отправить сообщение электронной почты — в Windows 10 не получится создать задачу с таким действием.
- Вывести сообщение — в Windows 10 не получится создать задачу с таким действием.
Выбрав действие «Запустить программу», и нажав Далее, увидим показанное на рисунке 10 окно.
Рисунок 10.
В этом окне надо выбрать программу, которая будет запускаться Планировщиком, её надо найти при помощи кнопки Обзор. Для примера я создал на диске С папку Scheduler и поместил в нее пакетный файл test.bat, в котором находится последовательность команд, которые надо запускать в определенное время. Нажав кнопку Обзор найдите файл, который будет запускать Планировщик и нажмите Открыть. Если все сделано правильно, то мастер создания нового задания выведет следующее окно, показанное на рисунке 11.
Рисунок 11.
Если проделанные ранее действия полностью удовлетворяют Вашим требованиям, то после нажатия кнопки Готово в окне, показанном на рисунке 13, создание будет завершено и в окне Планировщик заданий, в разделе «Библиотека планировщика заданий» появится вновь созданное задание. Если расписание запуска задачи требует дальнейшей, более тонкой донастройки, то отметьте пункт «Открыть окно Свойства для этой задачи после нажатия кнопки Готово» и нажмите кнопку Готово. В этом случае, будет открыто окно для настройки дополнительных возможностей расписания запуска задачи, которые подробно будут рассмотрены в следующей главе.
Дополнительные настройки
Если есть необходимость настроить дополнительные параметры запланированного задания, то щелкните правой кнопкой по созданному заданию в разделе «Библиотека планировщика заданий», находящейся в Планировщике заданий и выберите Свойства. Если дополнительные настройки будут меняться сразу после создания задания, то в последнем окне при создании задания (рисунок 11 в предыдущей главе) нужно поставить галочку у пункта «Открыть окно Свойства для этой задачи после нажатия кнопки Готово» и нажать Готово. Любая из этих последовательность действий приведет к тому, что откроется окно, пример которого показан на рисунке 12.
Рисунок 12.
Это окно содержит несколько вкладок с параметрами более тонкой настройки расписания запуска задачи. Все настройки, расположенные на них будут подробно рассмотрены ниже.
На первой вкладке Задание, внешний вид которой показан на рисунке 12, находятся основные сведения о запланированной задаче. Это:
- Имя — Имя задания, под которым оно отображается в Планировщике задач.
- Размещение — Расположение задачи в древовидной структуре планировщика задач. В данном случае «» обозначает, что задача расположена в корне древа.
- Автор — Имя пользователя, создавшего задачу.
- Описание — Текстовое описание задачи.
- При выполнении задачи использовать следующую учетную запись пользователя — Имя пользователя, под которым будет выполнятся задача.
- Выполнять только для пользователей, вошедших в систему — Если установить данный чекбокс, то данная задача будет выполнятся только при наличии залогиненного пользователя.
- Выполнять для всех пользователей — Данная задача будет выполнятся вне зависимости от наличия залогиненного пользователя.
- Выполнять с наивысшими правами — Для выполнения задачи будет предоставлены права администратора.
Внешний вид следующей вкладки «Триггеры» показан на рисунке 13.
Рисунок 13.
Эта вкладка предоставляет все возможности по управлению расписанием запуска запланированной задачи, которые значительно шире, чем те, которые была возможность настроить в мастере создания задач и о которых шла речь в предыдущей главе. На ней есть возможность создать как новый триггер для запуска, так и отредактировать уже имеющейся старый. Выбрав уже существующий триггер, и нажав кнопку «Изменить», откроются расширенные настройки триггера, которые можно увидеть на рисунке 14.
Рисунок 14.
Здесь можно наблюдать следующие пункты настроек:
- Начать задачу — Условие, при котором будет начинаться задача. Данная настройка уже рассматривалась в предыдущей главе.
- Параметры — Тип расписания запуска. Все типы были рассмотрены в предыдущей главе, поэтому останавливаться на них не будем.
- Отложить задачу на (произвольная задержка) — Позволяет включить задержку в выполнении задачи, без изменения её раписания запуска.
- Повторять задачу каждые … в течении … — С помощью данных настроек можно настроить повторение задачи в течении заданного интервала времени. Например, можно запускать задание каждые 30 минут в течение 8-ми часов или до определенного времени. Очень удобная возможность для решения определенных задач мониторинга событий. К примеру, иногда требуется проверять наличие в определенной папке файла с периодом в пять минут в течение рабочего дня и если он там появился, то запустить скрипт, который выполнит над файлом определенные действия.
- Остановить задачу через — Принудительно завершает запущенный Планировщиком задач процесс. Например, в поле Выполнять до указано время 18:00. Если задание очень большое и исполняется полчаса, то запуск его в 17:55 приведет к тому, что задание фактически будет работать до 18:25. Если такое положение дел нежелательно, то нужно поставить галку Остановить задание. В этом случае выполнение задания будет прекращено в 18:00 не смотря ни на что.
- Срок действия — Интервал дат, во время которого задача будет активна.
- Включено — Позволяет включить или выключить данный триггер.
Вкладка «Действия» показывает список задач, которые будут выполнятся при активации ранее расмотренных триггеров. Её внешний вид приведен на рисунке 15, расположенном ниже.
Рисунок 15.
На данной вкладке можно задать дополнительные действия, которые будут выполятся при активации задачи — в отличии от окна создания задачи, где можно было задать только одно единственное действие. При выборе создания или изменения действия появится уже окно с уже расмотренными ранее действиями по выборе запускаемой программы, по этому перейдем к следующей вкладке «Условия», которая показана на рисунке 16.
Рисунок 16.
Здесь содержатся дополнительные условия задачи, такие как:
- Запускать задачу при простое компьютера — Задача будет выполнятся только при «простое» компьютера, полезно для планирования запуска ресурсоемких задач, которые отнимают при своем выполнении все время процессора, загружая его на 100%.
- Запускать только при питании для электросети — Если устройство, на котором настроена эта задача, перейдет к питанию от аккамуляторов (например это ноутбук, или сервер с подключенным ИБП), то при этой включенной опции, задача не будет выполнятся.
- Пробуждать компьютер для выполнения задачи — При включении этой опции, Планировщик задач будет выводить компьютер из спящего режима для выполнения данной задачи.
- Запускать только при подключении к следующей сети — При активации этого параметра, и выборе нужного сетевого подключения, задача будет выполнятся только при условии, что это подключение активно.
Вкладка «Параметры» показана на рисунке 17.
Рисунок 17.
- Немедлено запускать задачу, если пропущен плановый запуск — В случае, если задача не была выполнена вовремя, она будет выполнятся при первой же возможности (например, если в это время был выключен компьютер, то задача начнет выполнятся сразу при его включении).
- При сбое выполнения перезапускать через — Если задача завершается с ошибкой, то можно указать времянной интервал, через который она будет повторно запущена. Так же можно задать количество повторных попыток запуска задачи.
- Останавливать задачу, выполняемую дольше — Можно принудительно остановить выполнение задачи, если задание выполняется дольше указанного времени.
- Принудительная остановка задачи, если она не прекращается по запросу — Если задача не останавливается, то она будет завершена принудительно.
- Если повтор задачи не запланирован, удалять через — Позволяет настроить автоматическое удаление «одноразовой» задачи спустя какое-то время.
Примеры настройки Планировщика
В данной главе будет показано несколько вариантов расписаний настроенной задачи. Все расписания запускают файл test.bat из C:Scheduler. Задача была сперва создана при помощи мастера, а затем в окне Планировщика открыты её свойства.
Ежедневный запуск задачи
Первый пример настройки показывает как настроить задачу на ежедневный запуск в 21:00. Самый простой вариант расписания, которое создается мастером без последующей донастройки. Свойства триггера созданной задачи выглядит так, как показано на рисунке 18.
Рисунок 18.
Такое расписание не требует каких-то дополнительных комментариев. Задача запускается каждый день в 21:00.
Запуск задачи через день
Это расписание отличается от предыдущего лишь тем, что оно запускается раз в два дня.
Рисунок 19.
Как видно на рисунке 19, в поле «Повторять каждые» установлено значение 2 дня. Это приведет к тому, что задача будет запущена раз в два дня. В это поле можно ввести любое значение.
Отложенный ежедневный запуск задачи
В этом примере запланирован ежедневный запуск задачи, но первый ее запуск отложен на 5 дней.
Рисунок 20.
Как видно, на рисунке 20 в Дополнительных настройках установлена дата начала работы задания на 30-е число, притом, что задание создано 25-го. Таким образом, мы создали задачу, но отложили начало ее ежедневного запуска на 10 дней.
Ежедневный запуск задачи до определенной даты с последующим удалением задачи из Планировщика
При таком расписании задача запускается ежедневно до определенной даты. Когда дата последнего запуска достигнута задача удаляется из Планировщика.
Такое расписание запускает задачу каждый день начиная с 25-го июля и заканчивая 25-м августом, о чем говорят Дополнительные параметры, показанные на рисунке 21.
Рисунок 21.
На рисунке 22 показаны настройки на вкладке «Параметры», а именно то, что установлена галочка у пункта «Если повтор задачи не запланирован, удалять через» и выбрано значение «Немедлено». Установка этой галки в совокупности с данным параметром приведет к тому, что задание, после последнего запуска будет удалено из Планировщика.
Рисунок 22.
Запуск задачи в разные дни недели в разное время
Этот пример демонстрирует настройку расписания запуска задачи Планировщиком в разные дни недели в разное время. При помощи расписания, представленного на рисунках 23 и 24 реализована следующая задача. Задание запускается в рабочие дни в 20:00, а в выходные — в 10:00. В созданном при использовании мастера создания задачи, были выставленны следующие значения, для запуска задачи по будням:
Рисунок 23.
После чего был создан второй триггер, и в нем выставлены уже настройки для запуска в выходные дни:
Рисунок 24.
Можно создать больше триггеров с расписаниями, чтобы более точно настроить время запуска задачи в разные дни, вплоть до создания семи триггеров для настройки расписания запуска задачи в разное время каждого дня недели.
Ежеминутный запуск задачи в рабочее время в рабочие дни
Такое расписание запускает задачу каждую минуту в течение рабочего дня и только в рабочие дни. Такое расписание будет полезно для проверки из скрипта наличия в определенной папке файла. Например, филиалы ежедневно в разное время заливают на ftp в центральном офисе отчеты о проделанной работе за предыдущий день, которые должны быть автоматически разархивированы и импортированы скриптом в корпоративную базу данных. Планировщик запускает скрипт, который проверяет, появился ли файл в указанной папке, если появился, то выполняет с ним необходимые действия, а если файла нет, то скрипт завершается.
Рисунок 25.
Стоит отметить, что по умолчанию нужных вариантов для настройки повтора и завершения выполнения задачи нет, их нужно вписать вручную, отредактировав наиболее подходящий вариант, предлагаемый планировщиком задач.
Ежемесячный запуск задачи
Этот пример показывает как настроить запуск задачи один раз в месяц. Как правило, такая периодичность нужна для запуска скриптов, которые анализируют логи за прошедший месяц, создают статистику и помещают логи в архив.
Рисунок 26.
Запуск задачи запланирован на первую минуту нового месяца. Это связано с тем, что в месяце может быть 28, 29, 30 или 31 день. Чтобы не создавать для каждого месяца свое расписание логичнее выполнять задачу первого числа каждого месяца.
Построенные на этих примерах расписания смогут запустить задачу именно в то время, так часто и по тем дням, когда это требуется для решения задачи. Настройки Планировщика настолько гибки, что можно создать сколь угодно сложное расписание. Использование Планировщика позволяет отказаться от использования утилит, которые могут работать нестабильно, будут занимать часть системных ресурсов, либо не будут обладать требуемой гибкостью настроек.
В следующей главе будет кратко рассказано о том, как протестировать созданное задание, чтобы убедиться в том, что первый его запуск пройдет без проблем.
Тестовый запуск задачи
Мало создать задание и написать программу или скрипт, которые будут запускаться Планировщиком. Нужно обязательно выполнить тестовый запуск задачи, чтобы убедиться, что задача работает именно так, как планировалось и при ее запуске не возникает проблем. Сделать это достаточно просто.
Щелкните правой кнопкой по созданной задаче в Планировщике и выберите пункт Выполнить. Задача будет немедленно запущена, не смотря на расписание.
Рисунок 27.
При удачном прохождении тестового запуска задачи, в главном окне Планировщика, в столбце «Результат прошлого запуска» появится значение 0х0. Это говорит о том, что запуск задачи был успешным. Если запуск задачи по каким-то причинам не удался, то в столбце «Результат прошлого запуска» будет стоять другое значение — 0x1. Помочь узнать причину незапуска задачи может журнал задачи, но перед этим его нужно включить. Для этого, нужно в правой колонке окна Планировщика задач найти пункт «Включить журнал всех заданий».
Рисунок 28.
После этого, можно повторно запустить задачу, и уже по журналу смотреть, в чем же произошло.
Успешные тестовые запуски задачи не отменяют необходимости постоянного контроля за выполнением задачи. Введя в «боевую» эксплуатацию задание не забывайте периодически просматривать журнал и Планировщик. Более разумное решение — создавать лог-файл работы самой задачи и по завершении ее работы открывать этот лог. К примеру, приходя утром на работу Вы будете видеть открытое окно редактора с лог-файлом. Это вынудит невольно просмотреть результат выполнения задачи, а отсутствие открытого окна будет означать проблемы, возникшие либо при запуске задачи, либо в ходе ее выполнения. Это позволит оперативно исправить проблему.
Управление заданиями Планировщика задач по сети
Нередко возникает необходимость выполнять автоматически те или иные действия на компьютерах пользователей в локальной сети. Администратор может управлять заданиями Планировщика на компьютерах пользователей удаленно, по сети. Учетная запись, из-под которой будет производится управление заданиями Планировщика должна обладать правами Администратора на компьютере пользователя.
Чтобы создать, изменить или удалить задание на компьютере пользователя по сети, откройте «Планировщик задач», и в левом столбце нажмите правой кнопкой мыши на «Планировщик заданий (Локальный компьютер)». В появившемся контекстном меню нужно выбрать пункт «Подключится к другому компьютеру…».
Рисунок 29.
После этого, следует ввести имя компьютера, к которому будет выполнятся подключение. Если для подключения к другому компьютеру нужно использовать данные пользователя, отличающиеся от локального, необходимо установить галочку на пункте «Подключиться как другой пользователь». По окончанию ввода всех данных нужно нажать на кнопку «ОК», и если все было сделано правильно — произойдет подключение к удаленному планировщику задач.
Рисунок 30.
После этого, можно начинать пользоваться удаленным планировщиком, будто это локальный.
В данной статье вашему вниманию предлагается сценарий PowerShell Set-ScheduledTaskCredential.ps1, позволяющий с помощью одной команды изменять сохраненные учетные данные одного или нескольких заданий.
Планировщик заданий в Windows Vista, Windows Server 2008 и в более новых версиях оснащен дополнительными функциями. Однако возможности команды Schtasks, предназначенной для управления запланированными к исполнению заданиями из командной строки, не отвечают новому уровню функциональности. Schtasks больше не позволяет изменять сохраненные учетные данные назначенных заданий, как в прежних версиях операционной системы. Это становится проблемой, если изменен пароль учетной записи, используемой для запуска нескольких заданий.
Изменение учетных данных назначенного задания
Планировщик заданий в текущих версиях Windows предоставляет несколько полезных новых функций, которые отсутствуют в версиях, предшествующих Vista и Server 2008. Например, помимо запуска программы, можно отправлять сообщения по электронной почте или выводить на экран окно сообщений. Введены также дополнительные параметры настройки времени запуска задания. В частности, можно привязать запуск задания к некому событию, регистрируемому в журнале событий. На консоли планировщика заданий каждое задание имеет отдельную вкладку «Журнал». Все это — заметные усовершенствования центральной системной службы Windows.
Однако с обновлением планировщика заданий не все так просто. Прежде всего, я заметил, что консоль планировщика заданий не позволяет переименовывать задания. Этот недостаток я исправил с помощью сценария PowerShell, позволяющего изменять имена назначенных заданий в более новых версиях (см. статью «Переименование запланированных задач в системах Windows 7, Server 2008 и Vista», опубликованную в Windows IT Pro/RE № 12 за 2011 год). Еще одна отмеченная мной проблема – отсутствие удобного способа вывода списка назначенных заданий на одном и более компьютерах. Как уже говорилось в статье «Готовим отчеты о запланированных задачах с помощью PowerShell», опубликованной в Windows IT Pro/RE № 3 за 2012 год, команда Schtasks с параметром /query с этой задачей не справляется.
В ходе дальнейшего взаимодействия с новым планировщиком заданий я выявил еще одну проблему Schtasks, а именно, невозможность использования этой команды с параметром /change для изменения сохраненных учетных данных (то есть имени пользователя и пароля) назначенного задания из командной строки. При попытке это сделать выдается сообщение об ошибке: «Неверный параметр». Экран 1 иллюстрирует попытку изменения сохраненных учетных данных задания на компьютере с Windows 7. В более ранних версиях синтаксис этой команды работает прекрасно (на экране 2 показано успешное выполнение данной команды в Windows XP).
Экран 1. Применение Schtasks /Change в Windows 7 |
Экран 2. Применение Schtasks /Change в Windows XP |
Выясняется, что если назначенное задание создавалось с помощью Schtasks с параметром /create, то для изменения его сохраненных учетных данных можно использовать Schtasks с параметром /change. Однако для изменения учетных данных заданий, создаваемых из консоли планировщика заданий (как в подавляющем большинстве случаев), команда Schtasks /change не работает. Это ограничение потенциально способно создать проблемы. Изменение учетных данных заданий по одному за раз из консоли планировщика заданий становится тем менее эффективным, чем больше число назначенных заданий.
Сценарий Set-ScheduledTaskCredential.ps1
· Для преодоления этого ограничения я составил сценарий PowerShell Set-ScheduledTaskCredential.ps1 (см. листинг ). Синтаксис сценария следующий:
Set-ScheduledTaskCredential -TaskName [-TaskCredential ] [-ComputerName ] [-ConnectionCredential ]
· Параметр -TaskName определяет задание, имеющее сохраненные учетные данные. Можно задать несколько имен заданий как массив, но использование групповых символов не допускается. Можно опустить имя параметра –TaskName, если его аргумент (имя задания или список имен заданий) стоит первым в строке команды. В Vista и более новых версиях планировщик заданий поддерживает папки заданий, поэтому необходимо указывать полный путь к заданию (например, Папка заданияИмя задания). Если имя папки опущено, то сценарий предполагает, что задание находится в корневой папке (). Параметр также поддерживает конвейерную передачу.
Параметр -TaskCredential – это объект PSCredential, определяющий сохраняемые учетные данные (имя пользователя и пароль), используемые для запуска задания или заданий. Параметр -TaskCredential – необязательный; если его опустить, то сценарий запросит ввод учетных данных. Параметр TaskCredential аналогичен параметрам Schtasks /change /RU и /RP.
Чтобы изменить учетные данные назначенного задания на удаленном компьютере, укажите имя компьютера с помощью параметра -ComputerName.
Если учетная запись текущего пользователя (служащая для запуска сценария) не обладает полномочиями изменения назначенных заданий, можно с помощью параметра –ConnectionCredential задать объект PSCredential с учетными данными, используемыми для подключения к планировщику заданий. Команду
-ConnectionCredential (Get-Credential)
· можно задействовать для запроса параметра PSCredential. Параметр –ConnectionCredential аналогичен параметрам Schtasks /change /U и /P.
В отношении сценария Set-ScheduledTaskCredential.ps1 необходимо сделать три оговорки.
— Сценарий не работает для более ранних версий (для операционных систем старше Vista или Server 2008). Чтобы избежать ошибок, сценарий проверяет версию планировщика задний. Если версия слишком старая, выдается ошибка. Это не большая беда, поскольку на более старых платформах можно по-прежнему пользоваться командой Schtasks /change.
— Сценарий выдает ошибку, если назначенное задание не имеет сохраненных учетных данных. Другими словами, если задание не настроено с сохраненными учетными данными, то сценарий не может выполнить их изменение.
— Сценарий работает с использованием объектов сценариев планировщика заданий (см. список в документе «Объекты сценариев планировщика заданий», http://msdn.microsoft.com/en-us/library/windows/desktop/aa383607.aspx). Эти объекты не поддерживают зашифрованные учетные данные, поэтому сценарий временно извлекает пароли используемых объектов PSCredential в виде открытого текста. Эти пароли не отсылаются как открытый текст по сети, но расшифровываются в памяти на время выполнения сценария. Таким образом, существует возможность, что в случае аварийного отказа компьютера, на котором выполняется сценарий, дамп его памяти может содержать копию пароля в виде открытого текста.
Пример использования
Самый простой способ применения сценария – изменение сохраненных учетных данных назначенного задания на текущем компьютере:
PS C:> Set-ScheduledTaskCredential «My Task»
· Команда запрашивает учетные данные для задания ‘My Task’. Имя параметра -TaskName опущено.
Как уже говорилось, параметр -TaskName поддерживает конвейерный ввод, поэтому, если требуется изменить сохраненные на компьютере учетные данные нескольких заданий, можно поместить имена этих заданий в текстовый файл, подавая выходной результат выполнения команды Get-Content на вход Set-ScheduledTaskCredential.ps1:
PS C:> Get-Content TaskNames.txt | Set-ScheduledTaskCredential
Параметр -ComputerName поддерживает только одно имя компьютера, однако все же можно подключиться к нескольким компьютерам с помощью команды ForEach-Object:
PS C:> «server1»,«server2» | >> ForEach-Object { Set-ScheduledTaskCredential ` >> -TaskName «My Task» -ComputerName $_ }
· Эта команда позволяет изменить учетные данные для задания ‘My Task’ на компьютерах ‘server1’ и ‘server2’. При выполнении этой команды вы заметите, что запрос на ввод учетных данных задания выдается дважды, поскольку ForEach-Object выполняет сценарий два раза (по одному для каждого имени компьютера). Чтобы устранить это неудобство, вначале создайте объект PSCredential, а затем используйте его с параметром -TaskCredential:
PS C:> $cred = Get-Credential «MYDOMAINMyUserName» PS C:> «server1»,«server2» | >> ForEach-Object { Set-ScheduledTaskCredential ` >> -TaskName «My Task» -TaskCredential $cred ` >> -ComputerName $_ }
· Первая команда задает создание объекта PSCredential и его сохранение в переменной $cred, а вторая использует этот набор учетных данных для изменения учетных данных назначенного задания ‘My Task’ на компьютерах ‘server1’ и ‘server2’.
Если ваша учетная запись не обладает полномочиями изменения назначенных заданий на компьютере, то с помощью параметра –ConnectionCredential задайте учетные данные, используемые для подключения:
PS C:> Set-ScheduledTaskCredential «My Task» ` >> -ComputerName «server1» ` >> -ConnectionCredential (Get-Credential)
· Эта команда генерирует два запроса учетных данных. Первый запрос содержит требование ввести учетные данные для параметра -ConnectionCredential, а второй – учетные данные назначенного задания. Выдачи обоих запросов можно избежать, создав объекты PSCredential перед запуском сценария.
Управление учетными данными заданий
· Планировщик заданий в Vista, Server 2008 и более новых версиях включает ряд дополнительных возможностей, но команда Schtasks /change, к сожалению, больше не позволяет изменять сохраненные учетные данные заданий. Используя сценарий Set-ScheduledTaskCredential.ps1, можно не беспокоиться по поводу этого ограничения.
Листинг. Сценарий Set-ScheduledTaskCredential.ps1
# Set-ScheduledTaskCredential.ps1
# Written by Bill Stewart (bstewart@iname.com)
#requires -version 2
<#
. SYNOPSIS Sets the credentials for one or more scheduled tasks on a computer. . DESCRIPTION Sets the credentials for one or more scheduled tasks on a computer. . PARAMETER TaskName
One or more scheduled task names. Wildcard values are not accepted. This parameter accepts pipeline input. . PARAMETER TaskCredential
The credentials for the scheduled task. If you don’t specify this parameter, you will be prompted for credentials. . PARAMETER ComputerName
The computer name where the scheduled task(s) reside. . PARAMETER ConnectionCredential
The credentials to use when connecting to the computer. . EXAMPLE PS C:>Set-ScheduledTaskCredential «My Scheduled Task» This command will prompt for credentials and configure the specified task using those credentials. . EXAMPLE PS C:>Set-ScheduledTaskCredential «Task 1»,«Task 2» -ComputerName server1
This command will prompt for credentials and configure the named scheduled tasks on the computer server1. . EXAMPLE PS C:>Set-ScheduledTaskCredential «Task 1»,«Task 2» -ComputerName server1
This command will prompt for credentials and configure the named scheduled tasks on the computer server1. . EXAMPLE PS C:>Get-Content TaskNames.txt | Set-ScheduledTaskCredential -ConnectionCredential (Get-Credential)
This command will set scheduled task credentials for all tasks named in the file TaskNames.txt. There will be two credential prompts. The first prompt is to specify credentials to connect to the Task Scheduler service, and the second prompt is to specify credentials to use for the scheduled tasks.
#> [CmdletBinding(SupportsShouldProcess=$TRUE)]
param(
[parameter(Mandatory=$TRUE,ValueFromPipeline=$TRUE)]
[String[]] $TaskName,
[System.Management.Automation.PSCredential] $TaskCredential,
[String] $ComputerName=$ENV:COMPUTERNAME,
[System.Management.Automation.PSCredential] $ConnectionCredential
) begin {
$PIPELINEINPUT = (-not $PSBOUNDPARAMETERS.ContainsKey(«TaskName»)) -and (-not $TaskName)
$TASK_LOGON_PASSWORD = 1
$TASK_LOGON_S4U = 2
$TASK_UPDATE = 4
$MIN_SCHEDULER_VERSION = 0x00010002 # Try to create the TaskService object on the local computer; throw an error on failure
try {
$TaskService = new-object -comobject «Schedule.Service» }
catch [System.Management.Automation.PSArgumentException] {
throw $_
} # Assume $NULL for the schedule service connection parameters unless -ConnectionCredential used
$userName = $domainName = $connectPwd = $NULL
if ($ConnectionCredential) {
# Get user name, domain name, and plain-text copy of password from PSCredential object
$userName = $ConnectionCredential.UserName.Split(«»)[1] $domainName = $ConnectionCredential.UserName.Split(»«)[0] $connectPwd = $ConnectionCredential.GetNetworkCredential().Password
}
try {
$TaskService.Connect($ComputerName, $userName, $domainName, $connectPwd)
}
catch [System.Management.Automation.MethodInvocationException] {
write-error»Error connecting to ‘$ComputerName’ — ‘$_’« exit
}
# Returns a 32-bit unsigned value as a version number (x.y, where x is the
# most-significant 16 bits and y is the least-significant 16 bits).
function convertto-versionstr([UInt32] $version) {
$major = [Math]::Truncate($version / [Math]::Pow(2, 0x10)) -band 0xFFFF
$minor = $version -band 0xFFFF
»$($major).$($minor)« } if ($TaskService.HighestVersion -lt $MIN_SCHEDULER_VERSION) {
write-error (»Schedule service on ‘$ComputerName’ is version $($TaskService.HighestVersion) «+ »($(convertto-versionstr($TaskService.HighestVersion))). The Schedule service must «+ »be version $MIN_SCHEDULER_VERSION ($(convertto-versionstr $MIN_SCHEDULER_VERSION)) «+ »or higher.«) exit
} # This prevents a scoping problem—if the $TaskCredential variable
# doesn’t exist, it won’t get created in the correct scope—create
# new variable as a workaround
$NewTaskCredential = $TaskCredential
if (-not $NewTaskCredential) {
$NewTaskCredential = $HOST.UI.PromptForCredential(»Task Credentials«, »Please specify credentials for the scheduled task.«, «», «») if (-not $NewTaskCredential) {
write-error»You must specify credentials.« exit
}
} function set-scheduledtaskcredential2($taskName) {
$rootFolder = $TaskService.GetFolder(»«) try {
$taskDefinition = $rootFolder.GetTask($taskName).Definition
}
catch [System.Management.Automation.MethodInvocationException] {
write-error»Scheduled task ‘$taskName’ not found on ‘$computerName’.« return
}
$logonType = $taskDefinition.Principal.LogonType
# No need to set credentials for tasks that don’t have stored credentials.
if (-not (($logonType -eq $TASK_LOGON_PASSWORD) -or ($logonType -eq $TASK_LOGON_S4U))) {
write-error»Scheduled task ‘$taskName’ on ‘$ComputerName’ doesn’t have stored credentials.« return
}
if (-not $PSCMDLET.ShouldProcess(»Task ‘$taskName’ on computer ‘$ComputerName’«, »Set scheduled task credentials«)) { return }
try {
[Void] $rootFolder.RegisterTaskDefinition($taskName, $taskDefinition, $TASK_UPDATE,
$NewTaskCredential.UserName, $NewTaskCredential.GetNetworkCredential().Password, $logonType)
}
catch [System.Management.Automation.MethodInvocationException] {
write-error»Error updating scheduled task ‘$taskName’ on ‘$computerName’ — ‘$_'»
}
}
} process {
if ($PIPELINEINPUT) {
set-scheduledtaskcredential2 $_
}
else {
$TaskName | foreach-object {
set-scheduledtaskcredential2 $_
}
}
}