Запуск и получение дополнительной информации
Для запуска задачи, не зависимо от триггеров, используется команда ‘Start-ScheduledTask’:
У нас так же есть 2 команды, которые возвращают информацию о задачах.
Первая команда просто возвращает список задач, которые есть в каталогах планировщика их статус и путь:
У команды запуска и получения задач из планировщика можно использовать параметры:
- TaskName — имя объекта;
- TaskPath — путь до объекта.
Более полезная команда следующая, так как вернет немного больше информации:
Само собой все эти команды можно использовать в конвейере:
Если задача занимает много времени и ее нужно остановить — можно выполнить следующие действия:
Вам так же будет интересно:
Политика выполнения
Вопреки распространенному мнению, политика выполнения в PowerShell не является средством обеспечения безопасности. Она предназначена для предотвращения непреднамеренного выполнения сценария пользователем. Определенный пользователь может без труда обойти политику выполнения в PowerShell. В таблице 1-2 показана политика выполнения по умолчанию для текущих операционных систем Windows.
Версия операционной системы Windows | Политика выполнения по умолчанию |
---|---|
Server 2019 | Удаленно подписанная |
Server 2016 | Удаленно подписанная |
Windows 10 | С ограниченным доступом |
Любая команда PowerShell может выполняться в интерактивном режиме, независимо от настройки политики выполнения. Политика выполнения влияет только на команды, выполняемые в сценарии. Командлет используется для определения текущего параметра политики выполнения, а командлет используется для изменения политики выполнения. Рекомендуется использовать политику RemoteSigned, которая требует, чтобы предназначенные для выполнения скачиваемые сценарии были подписаны доверенным издателем.
Проверка текущей политики выполнения
Если для политики выполнения задано С ограниченным доступом, сценарии PowerShell вообще не запускаются. Это параметр по умолчанию для всех клиентских операционных систем Windows. Чтобы продемонстрировать проблему, сохраните следующий код как файл с именем .
Эта команда выполняется в интерактивном режиме без ошибок при условии, что PowerShell запущена с повышенными правами администратора. Но при сохранении в виде файла сценария и попытке выполнить сценарий выдается ошибка.
Обратите внимание, что в сообщении об ошибке, приведенном в предыдущем наборе результатов, указывается точная проблема (в этой системе отключено выполнение сценариев). При выполнении в PowerShell команды, которая создает сообщение об ошибке, обязательно следует прочесть сообщение об ошибке, а не просто перезапустить команду и надеяться на ее успешное завершение
Измените политику выполнения PowerShell на удаленно подписанную.
Обязательно прочтите предупреждение, которое отображается при изменении политики выполнения. Кроме того, рекомендуется ознакомиться с разделом справки about_Execution_Policies, чтобы знать о влиянии изменения политики выполнения на безопасность.
Теперь, когда для политики выполнения задано значение Удаленно подписанная, сценарий будет выполняться без ошибок.
Прежде чем продолжить, запустите службу времени Windows. В противном случае могут возникнуть непредвиденные проблемы.
Практика
Я думаю, вам будет интереснее сразу перейти к практике, убедиться в работоспособности скриптов, а потом уже разбираться с теорией.
Содержимое архива
В архиве sunrise-sunset.zip четыре скрипта PowerShell.
Скрипт | Назначение |
---|---|
set_tasks.ps1 | Создает три запланированных задания:• Sunrise-Sunset-Time (основное)• Sunrise• Sunset |
sunrise_sunset_time.ps1 | Выполняется от имени системы из основного задания: ежедневно по расписанию, при входе любого пользователя в систему и при выходе из сна/гибернации. Скрипт получает время восхода и заката, обновляет время запуска вспомогательных заданий и запускает их при необходимости.
Например, если ПК был выключен вечером после заката, а включен днем после рассвета выполняется задание Sunrise. |
sunrise.ps1 | Выполняется из задания Sunrise для запуска скрипта на рассвете. |
sunset.ps1 | Выполняется из задания Sunset для запуска скрипта на закате. |
Содержимое двух последних скриптов вы можете менять на свое усмотрение.
Создание задач в планировщике
- Скачайте архив sunrise-sunset.zip и распакуйте в папку, в которой в дальнейшем будут храниться скрипты. Если вы впоследствии поменяете путь к скриптам, придется править задачи в планировщике или пересоздавать их.
- Откройте скрипт sunrise_sunset_time.ps1 в текстовом редакторе, укажите широту и долготу своего местоположения (карты Google или Яндекс в помощь) и сохраните файл.
- В проводнике перейдите в папку со скриптами, из меню Файл выберите Запустить Windows Powershell от имени администратора и выполните команду ниже (также можно явно задать путь к папке параметром ):
powershell -ExecutionPolicy Bypass '.\set_tasks.ps1'
Это все! В планировщике появятся три задачи с именами, начинающимися на . Если он был открыт во время выполнения команды, нажмите F5.
Цвета ОС и приложений могут сразу же поменяться — например, они станут темными, если команда выполнялась после заката.
Изменение задач под себя (основы)
Вам достаточно прописать свои команды PowerShell в скриптах sunrise.ps1 и sunset.ps1. Сейчас там просто изменяются два параметра реестра, например, на закате:
#Переключиться на темные цвета #Windows New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize -Name SystemUsesLightTheme -Value 0 -Type Dword -Force #приложений New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize -Name AppsUseLightTheme -Value 0 -Type Dword -Force
Если вас это чем-то смущает или не устраивает, откройте одноименные задания в планировщике и пропишите нужные команды и их аргументы на вкладке Действия. Например, в качестве команды вы можете просто указать полный путь к CMD-файлу.
Более детальный разбор заданий в теоретической части статьи.
Тестовый запуск задачи
Мало создать задание и написать программу или скрипт, которые будут запускаться Планировщиком. Нужно обязательно выполнить тестовый запуск задачи, чтобы убедиться, что задача работает именно так, как планировалось и при ее запуске не возникает проблем. Сделать это достаточно просто.
Щелкните правой кнопкой по созданной задаче в Планировщике и выберите пункт Выполнить. Задача будет немедленно запущена, не смотря на расписание.
Рисунок 27.
При удачном прохождении тестового запуска задачи, в главном окне Планировщика, в столбце «Результат прошлого запуска» появится значение 0х0. Это говорит о том, что запуск задачи был успешным. Если запуск задачи по каким-то причинам не удался, то в столбце «Результат прошлого запуска» будет стоять другое значение — 0x1. Помочь узнать причину незапуска задачи может журнал задачи, но перед этим его нужно включить. Для этого, нужно в правой колонке окна Планировщика задач найти пункт «Включить журнал всех заданий».
Рисунок 28.
После этого, можно повторно запустить задачу, и уже по журналу смотреть, в чем же произошло.
Успешные тестовые запуски задачи не отменяют необходимости постоянного контроля за выполнением задачи. Введя в «боевую» эксплуатацию задание не забывайте периодически просматривать журнал и Планировщик. Более разумное решение — создавать лог-файл работы самой задачи и по завершении ее работы открывать этот лог. К примеру, приходя утром на работу Вы будете видеть открытое окно редактора с лог-файлом. Это вынудит невольно просмотреть результат выполнения задачи, а отсутствие открытого окна будет означать проблемы, возникшие либо при запуске задачи, либо в ходе ее выполнения. Это позволит оперативно исправить проблему.
Важное примечание о приоритете CPU и I/O
Когда программа запускается из планировщика, ей принудительно назначается низкий приоритет процессорного времени (CPU) и операций ввода-вывода (I/O). Это сделано специально, поскольку задачи планировщика рассчитаны на выполнение в фоне.
Низкая нагрузка на процессор и жесткий диск оптимально подходит для фоновых задач, но не для всех программ. Так, программам для проверки обновлений или почтовому клиенту вряд ли нужно много ресурсов – их можно безболезненно запускать из планировщика. Но если программа требует повышенного внимания процессора или активно взаимодействует с диском, ее лучше не ограничивать.
Указать другой приоритет задания можно только .
WinRM (WS-Management)
WinRM – это реализация открытого стандарта DMTF (Distributed Management Task Force) от Microsoft, которая позволяет управлять системами с помощью веб-служб. Углубляться в устройство технологии я не буду, а лишь кратко опишу, что необходимо для её использования.
Версия WinRM 1 и выше входит в состав операционных систем, начиная с Windows Vista и Windows Server 2008. Для Windows XP и Windows Server 2003 можно установить WinRM в виде отдельного пакета (см. ссылки).
Для того чтобы быстро настроить компьютер для подключений к нему используя стандартные порты и разрешив подключения административным учетным записям, достаточно выполнить команду:
Чтобы winrm не спрашивал подтверждения, можно добавить к вызову ключ -quiet. Узнать информацию о более тонкой настройке можно посмотреть встроенную справку winrm:
Если на управляемом компьютере работает веб-сервер, WinRM никак ему не помешает, хоть и использует по умолчанию стандартные порты HTTP. Он будет перехватывать лишь подключения предназначенные специально для него.
Запуск, остановка и удаление запланированных задач.
SCHTASKS /RUN
SCHTASKS /Run [/S [/U ]]] /TN
/S Удаленная система для подключения. /U Контекст, в котором будет выполняться команда schtasks.exe. /P [] Пароль для указанного пользовательского контекста. Запрос ввода, если не указан. /I Выполнить задачу немедленно, игнорируя любые ограничения. /TN Имя запланированной задачи, которая должна быть запущена. /? Вывод справки по использованию.
SCHTASKS /Run /I /TN «System Backup»SCHTASKS /Run /S SERVER /U Mydomain\Admin /P AdmPass /I /TN «System Backup»
SCHTASKS /End [/S [/U ]]] /TN
/S Удаленная система для подключения. /U Контекст, в котором будет выполняться команда schtasks.exe. /P [] Пароль для указанного пользовательского контекста. Запрос ввода, если не указан. /TN Имя запланированной задачи для остановки. /? Вывод справки. Примеры: SCHTASKS /End /? SCHTASKS /End /TN "Архивация" SCHTASKS /End /S /U /P /TN
SCHTASKS /Delete [/S [/U ]]] /TN
/S Удаленная система для подключения. /U Контекст, в котором будет выполняться команда schtasks.exe. /P [] Пароль для указанного пользовательского контекста. Запрос ввода, если не указан. /TN Имя удаляемой запланированной задачи. Для удаления всех задач можно использовать подстановочный знак "*". /F Принудительное удаление задачи с подавлением всех сообщений, если указанное задание выполняется в настоящее время. /? Вывод справки по использованию. Примеры: SCHTASKS /Delete /TN * /F SCHTASKS /Delete /TN SCHTASKS /Delete /S /U /P /TN SCHTASKS /Delete /S /U /P /TN /F
SCHTASKS /ShowSid /TN имя_задачи
УСПЕХ: ИД безопасности "S-1-5-87-2329472845-559684683-1933506305-79090395-3844037043" для пользователя "avast! Emergency Update" успешно вычислен.
Планировщик заданий WindowsЗапуск командных файлов от имени администратора без запроса UAC
Подробное описание
PowerShell параллельно выполняет команды и скрипты с помощью заданий. Существует три типа заданий, предоставляемых PowerShell для поддержки параллелизма.
- — Команды и скрипты выполняются в удаленном сеансе. Дополнительные сведения см. в разделе about_Remote_Jobs.
- — Команды и скрипты выполняются в отдельном процессе на локальном компьютере. См. дополнительные сведения о заданиях.
- или — команды и скрипты выполняются в отдельном потоке в том же процессе на локальном компьютере.
Задания на основе потоков не так надежны, как удаленные и фоновые задания, так как они выполняются в одном и том же процессе в разных потоках. Если в одном задании есть критическая ошибка, которая приводит к сбою процесса, то все остальные задания в этом процессе завершаются.
Однако задания на основе потоков нуждаются в меньшей нагрузке. Они не используют удаленный уровень или сериализацию. Результирующие объекты возвращаются в виде ссылок на активные объекты в текущем сеансе. Без такой нагрузки задания на основе потоков выполняются быстрее и используют меньше ресурсов, чем другие типы заданий.
Важно!
Родительский сеанс, создавший задание, также отслеживает состояние задания и собирает данные конвейера. Дочерний процесс задания завершается родительским процессом после того, как задание достигнет завершенного состояния. Если родительский сеанс завершается, все выполняющиеся дочерние задания завершаются вместе с их дочерними процессами.
Существует два способа обойти эту ситуацию.
- Используйте для создания заданий, выполняемых в отключенных сеансах. Дополнительные сведения см. в разделе about_Remote_Jobs.
- Используйте для создания нового процесса, а не задания. Дополнительные сведения см. в разделе Start-Process.
Изменение пользователя, параметров безопасности и уровня запуска
Создавая задачи в планировщике мы имеем блок ‘Security Options’, который чаще используется с настройками по умолчанию. В этом блоке определяются следующие параметры:
- Пользователь, от имени которого будет выполнен запуск;
- Выполняется ли задача для вошедших в систему пользователей;
- Привилегии запуска (от пользователя/администратора);
- Совместимость.
В графическом интерфейсе эти параметры настраиваются в следующем блоке:
Так же как и в случае с созданием задачи, в случае ее изменения мы создаем разные объекты (результаты команд), которые затем привязываем через команду ‘Set-SchedukedTask’.
С помощью следующих команд мы изменим пользователя, повысим права и изменим совместимость:
# Изменяем пользователя и повышаем права запуска
$task_user = New-ScheduledTaskPrincipal -UserId ‘.\admin’ -RunLevel Highest
# Изменяем совместимость
$task_settings = New-ScheduledTaskSettingsSet -Compatibility ‘Win8’
# Добавляем объекты созданные выше к существующей задаче
Set-ScheduledTask -TaskName ‘Сбор логов’ -Principal $task_user -Settings $task_settings
1 |
# Изменяем пользователя и повышаем права запуска $task_user=New-ScheduledTaskPrincipal-UserId’.\admin’-RunLevel Highest # Изменяем совместимость $task_settings=New-ScheduledTaskSettingsSet-Compatibility’Win8′ # Добавляем объекты созданные выше к существующей задаче Set-ScheduledTask-TaskName’Сбор логов’-Principal$task_user-Settings$task_settings |
Если у вас будет следующая ошибка, то скорее всего она связана с неверным пользователем:
Set-ScheduledTask : No mapping between account names and security IDs was done.
Само собой эти же объекты можно использовать при создании (регистрации) задачи в планировщике:
$name = ‘Task 3’
Register-ScheduledTask -TaskName $name `
-Action $task_action `
-Trigger $task_trigger `
-Principal $task_user `
-Settings $task_settings
1 |
$name=’Task 3′ Register-ScheduledTask-TaskName$name` -Action$task_action` -Trigger$task_trigger` -Principal$task_user` -Settings$task_settings |
Учитывайте, что у New-ScheduledTaskSettingsSet около 30 возможных параметров (работа при отключенной батареи, максимальное количество перезапусков и т.д.). В примере выше рассмотрено лишь несколько.
Изменение триггеров и действий
С помощью Set-ScheduledTask так же добавляются и изменяются триггеры и действия. Изменение будут заключаться в полной замене существующих триггеров и действий у задач. Вам просто нужно создать объект по аналогии с тем, как это делалось в предыдущих разделах:
$trigger = New-ScheduledTaskTrigger -Daily -At 14:00
$action = New-ScheduledTaskAction -Execute Calc.exe
Set-ScheduledTask -TaskName ‘Сбор логов’ -Action $action -trigger $trigger
1 |
$trigger=New-ScheduledTaskTrigger-Daily-At1400 $action=New-ScheduledTaskAction-Execute Calc.exe Set-ScheduledTask-TaskName’Сбор логов’-Action$action-trigger$trigger |
Удаленное взаимодействие с Windows PowerShell без настройки
Многие командлеты Windows PowerShell имеют параметр ComputerName, который позволяет собирать данные и изменять параметры одного или нескольких удаленных компьютеров. Эти командлеты используют разные протоколы связи и работают во всех операционных системах Windows без специальной настройки.
В эти командлеты входят следующие:
- Restart-Computer
- Test-Connection
- Clear-EventLog
- Get-EventLog
- Get-HotFix
- Get-Process
- Get-Service
- Set-Service
- Get-WinEvent
- Get-WmiObject
Обычно командлеты, которые поддерживают удаленное взаимодействие без специальной настройки, имеют параметр ComputerName, но не имеют параметра Session. Чтобы найти эти командлеты в сеансе, введите:
Создание задания синхронной передачи BITS
Примечание
Знак ударения-ударения ( ` ) используется для обозначения разрыва строки.
В предыдущем примере локальные и удаленные имена файла указываются в параметрах источника и назначения соответственно. По завершении передачи файла или при появлении состояния ошибки отображается командная строка.
Тип перемещения по умолчанию — download. При передаче файлов в расположение HTTP параметру трансфертипе должно быть присвоено значение upload.
Так как для командлета Start-BitsTransfer применяется расположение параметра, для параметров источника и назначения не нужно указывать имена параметров. Поэтому эту команду можно упростить следующим образом.
Создание простой задачи в планировщике заданий
Для примера я возьму все тот же Adobe Reader Speed Launcher — процедура будет фактически одинаковой для всех приложений. Откройте планировщик заданий (Пуск — Поиск — taskschd.msc).
Я рекомендую разместить все задачи, связанные с автозагрузкой, в одной папке. Щелкните правой кнопкой мыши на узле Библиотека планировщика заданий, выберите из контекстного меню пункт Создать папку и укажите имя для нее — я назвал свою Start Up. В этой папке будут размещаться задачи автозагрузки приложений. Затем щелкните правой кнопкой мыши по созданной папке и выберите из контекстного меню пункт Создать простую задачу. Вы увидите первое окно мастера.
Укажите имя для задачи и нажмите кнопку Далее.
В качестве триггера задачи укажите При входе в Windows и нажмите кнопку Далее.
В качестве действия укажите Запустить программу и нажмите кнопку Далее.
В окне Запуск программы вам нужно указать путь к исполняемому файлу программы. Используйте кнопку Обзор или введите путь вручную, не забывая заключать его в кавычки при наличии пробелов. Если вы используете AutoRuns, можно скопировать путь к программе из информационной панели, расположенной внизу окна. Если программа использует аргументы командной строки, введите их в соответствующее поле. Например, у боковой панели Windows таким аргументом является /autorun. Нажмите кнопку Далее, чтобы перейти к сводке задачи.
Убедитесь, что параметры задачи указаны правильно. Установите флажок, отвечающий за открытие свойств задачи, и нажмите кнопку Готово. Задача будет создана, и сразу же откроется окно ее свойств.
Теперь нужно настроить отложенный запуск задачи. Перейдите на вкладку Триггеры
и дважды щелкните по триггеру При входе в систему (либо выделите его и нажмите кнопку Изменить).
В окне Изменение триггера следует обратить внимание на два параметра, выделенные на рисунке
- Вы должны указать, будет задача запускаться только для конкретной учетной записи (по умолчанию — для вашей) или для всех пользователей, входящих в систему. Если с приложением работаете только вы, запускать его для всех пользователей, скорее всего, не имеет смысла.
- Вы должны задать, на какой временной интервал будет отложен запуск программы после входа пользователя в систему. Здесь однозначных рекомендаций быть не может — все зависит от ваших предпочтений. Меня, например, вполне устраивает запуск менеджера буфера обмена через две минуты, а браузера — через 5 минут. Что же касается утилиты jusched.exe, то ее запуск я откладываю на 30 минут.
Аналогичным образом создавайте задания для других программ, запуск которых вы хотите отложить.
Об этом мы поговорим чуть ниже, а пока надо убедиться, что все работает.
Создание временного события — триггера
Следующим мы определим, когда мы будем запускать задачу. Это делается с помощью команды ‘New-ScheduledTaskTrigger’. Эта команда имеет множество параметров, которые делятся на системные события и временные.
Системные события, которые мы можем использовать, следующие:
- AtLogOn — во время входа пользователя в систему;
- AtStartup — во время запуска системы.
Аргументы связанные со временем:
- At — точное время выполнение скрипта;
- Daily — ежедневно;
- DaysInterval — интервал в днях. Если указать цифру 1, то подразумевается, что задача будет запускаться ежедневно. Если указать 2 — то задача будет запускаться через день;
- DaysOfWeek — день недели, когда будет выполнен запуск. Возможны варианты: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday;
- Once — запуск будет выполнен единожды;
- Weekly — запуск по неделям;
- WeeksInterval — интервал между неделями;
- RandomDelay — указывает задержку между запусками. Задержка определяется случайно от указанного значения. Принимает не число, а объект TimeSpan;
- RepetitionDuration — Срок действия задачи. Принимает не число, а объект TimeSpan.
- RepetitionInterval — время через которое задача будет повторяться. Принимает не число, а объект TimeSpan.
Большую часть команд, связанных со временем, мы можем сочетать вместе. Так, например, мы создадим триггер выполнится однажды в 13:00:
Еще несколько примеров:
Меня интересует ежедневный запуск задачи с периодичностью в 5 минут. Для ‘RepetitionInterval’, который устанавливает такие интервалы, нужно использовать дополнительную команду ‘New-TimeSpan’. В этой команде определим сам интервал:
Анализ выполнения и завершения, а так же сравнение
Используя предыдущие команды мы можем выполнить некоторую автоматизацию. Например так мы можем увидеть результат выполненных задач:
Get-ScheduledTask | Get-ScheduledTaskInfo | select *
1 | Get-ScheduledTask|Get-ScheduledTaskInfo|select * |
Часть этих кодов имеет следующую расшифровку (был использован автоматический переводчик):
- 0 — операция успешно завершена.
- 1 — Вызывается неправильная функция или неизвестная функция. 2 Файл не найден.
- 10 — Неправильная среда.
- 267008 — Задача готова к запуску в следующее запланированное время.
- 267009 — В данный момент идет выполнение.
- 267010 — Задача не будет запущена в запланированное время, потому что она отключена.
- 267011 — Запуск еще не был выполнен.
- 267012 — Для этой задачи больше нет запланированных запусков.
- 267013 — Одно или несколько свойств, необходимых для запуска этой задачи по расписанию, не были установлены.
- 267014 — Последний запуск задачи был прерван пользователем.
- 267015 — Либо у задачи нет триггеров, либо существующие триггеры отключены или не установлены.
- 2147750671 — Учетные данные повреждены.
- 2147750687 — Экземпляр этой задачи уже запущен.
- 2147943645 — Служба недоступна (установлен ли флажок «Запускать только при входе пользователя в систему»?).
- 3221225786 — Приложение было закрыто в результате нажатия CTRL + C.
- 3228369022 — Неизвестное программное исключение.
Альтернативное — вы можете открыть интерфейс планировщика и посмотреть какая ошибка отображается там (она будет текстом).
Далее вы можете создать скрипт для поиска сбойных задач. Например меня интересует только задачи со сбоями, а не успешно работающие. Так как я не знаю всех кодов, мне нужно будет исключить только коды успешного выполнения:
# Коды, которые меня не интересуют (успешное выполнение)
$success_sc_codes = @(0, 267008, 267009, 267010, 267011, 267012)
# Получает объект, который содержит детальную информацию по всем процессам
$all_sc_tasks = Get-ScheduledTask | Get-ScheduledTaskInfo
foreach ($task in $all_sc_tasks){
# Если код не соответствует тому что есть в массиве — выводим на экран
if (!($task.LastTaskResult -in $success_sc_codes)){
$task
}
}
1 |
# Коды, которые меня не интересуют (успешное выполнение) $success_sc_codes=@(,267008,267009,267010,267011,267012) # Получает объект, который содержит детальную информацию по всем процессам $all_sc_tasks=Get-ScheduledTask|Get-ScheduledTaskInfo foreach($task in$all_sc_tasks){ # Если код не соответствует тому что есть в массиве — выводим на экран if(!($task.LastTaskResult-in$success_sc_codes)){ $task } } |
Такой же подход можно использовать при поиске странных сервисов-программ. Например у нас есть эталонный компьютер/сервер и на нем созданы все нужные задачи. Всех их мы помещаем в один объект, а затем сравниваем с другими экземплярами:
# Создаем пустой массив
$good_list = @()
# Получаем существующие задачи
$all_sc_tasks = Get-ScheduledTask
foreach ($task in $all_sc_tasks){
# Помещаем в созданный массив только имена
$good_list.Add($task.TaskName) > Out-Null
}
1 |
# Создаем пустой массив $good_list=System.Collections.ArrayList@() # Получаем существующие задачи $all_sc_tasks=Get-ScheduledTask foreach($task in$all_sc_tasks){ # Помещаем в созданный массив только имена $good_list.Add($task.TaskName)>Out-Null } |
Далее, через разные средства, мы можем сравнить этот список на других компьютерах:
# Получаем список на другом компьютере
$all_sc_tasks = Get-ScheduledTask
foreach ($task in $all_sc_tasks){
# Ищем имена, которые не соответствуют тому что есть в массиве
if (!($task.TaskName -in $good_list)){
$task
}
}
1 |
# Получаем список на другом компьютере $all_sc_tasks=Get-ScheduledTask foreach($task in$all_sc_tasks){ # Ищем имена, которые не соответствуют тому что есть в массиве if(!($task.TaskName-in$good_list)){ $task } } |
Как создать задание планировщика в PowerShell 2.0
В версии Powershell 2.0 (Windows 7, Windows Server 2008 R2) для создания повторяющегося задания (ScheduledJob) из PowerShell необходимо воспользоваться COM интерфейсом Schedule.Service. В этом примере мы создадим задание планировщика, которое во время загрузке системы должно выполнить определённый файл с PowerShell скриптом. Задание выполняется с правами системы (System).
Примечание. В этом случае создается триггер, срабатывающей при загрузке системы – код 8. Полный список кодов:
TASK_TRIGGER_EVENT | |
TASK_TRIGGER_TIME | 1 |
TASK_TRIGGER_DAILY | 2 |
TASK_TRIGGER_WEEKLY | 3 |
TASK_TRIGGER_MONTHLY | 4 |
TASK_TRIGGER_MONTHLYDOW | 5 |
TASK_TRIGGER_IDLE | 6 |
TASK_TRIGGER_REGISTRATION | 7 |
TASK_TRIGGER_BOOT | 8 |
TASK_TRIGGER_LOGON | 9 |
TASK_TRIGGER_SESSION_STATE_CHANGE | 11 |
После выполнения команды в планировщике появится новое задание NewPsTask.
Синтаксис команд довольно сложный, поэтому разработчики добавили в PowerShell Pack (является частью Windows 7 Resource Kit) отдельный модуль TaskScheduler, который существенно упрощает процесс создания заданий планировщика из PowerShell 2.0. После установки модуля создать задание можно с помощью таких команд:
Задания
Служба планировщика заданий работает, управляя задачами ; Задача относится к действию (или действиям), предпринимаемым в ответ на триггер (ы). Задача определяется путем связывания набора действий, которые могут включать запуск приложения или выполнение определенных действий, с набором триггеров, которые могут быть основаны на времени или на событиях. Кроме того, задача также может содержать метаданные, которые определяют, как будут выполняться действия, например контекст безопасности, в котором будет выполняться задача. Задачи сериализуются в файлы и хранятся в специальной папке под названием « Папка задач» , организованной в подкаталогах. Программно доступ к папке задач осуществляется с помощью интерфейса или объекта сценария, а к отдельным задачам — с помощью интерфейса или объекта.
Работа с «Планировщиком заданий»
«Планировщик заданий» позволяет запланировать запуск указанных процессов в системе на точно установленное время, при наступлении определенного события или же задать периодичность данному действию. В Windows 7 установлена версия данного инструмента под названием «Task Scheduler 2.0». Она используется не только непосредственно пользователями, но и ОС для выполнения различных внутренних системных процедур. Поэтому указанный компонент не рекомендуется отключать, так как впоследствии возможны различные проблемы в работе компьютера.
Далее мы подробно рассмотрим то, как зайти в «Планировщик заданий», что он умеет делать, как с ним работать, а также, как в случае необходимости его можно деактивировать.
Программы в автозагрузке
Стандартный совет в таких случаях — «почистить автозагрузку», т. е. отключить запуск ненужных приложений, например, с помощью утилиты msconfig, запускаемой из меню Пуск — Поиск. Совет хороший, но что делать в том случае, если автоматический запуск все-таки имеет смысл?
Недостаток стандартной автозагрузки
Рассмотрим, например, Adobe Reader Speed Launcher (reader_sl.exe) — утилита прописывается в автозагрузку при установке Adobe Acrobat Reader. Запуск утилиты значительно ускоряет открытие Adobe Reader, в том числе и при просмотре в PDF-файлов в браузере (обсуждение альтернативных программ для просмотра PDF-файлов выходит за рамки этой статьи). Или возьмем jusched.exe — утилиту, следящую за обновлениями виртуальной машины Sun Java, которую нужно поддерживать в актуальном состоянии хотя бы из соображений безопасности. Утилита также прописывается в автозагрузку, поскольку вручную выполнять обновление никто не будет. Даже если вы считаете, что автоматический запуск этих утилит можно смело отключать, у вас в арсенале, скорее всего, найдутся программы, которые вы вполне осознанно запускаете автоматически. Но все ли они нужны вам с первой минуты работы в системе?
Вряд ли вы первым делом начинаете читать документы в формате PDF или беспокоиться об обновлении виртуальной машины. Возможно, вам сразу не требуется эмулятор виртуальных дисков или клиент обмена сообщениями.
Было бы здорово, если бы существовала возможность немного распределить загрузку программ по времени. И такая возможность есть! Планировщик заданий Windows позволяет откладывать выполнение задач, привязанных к запуску системы или входе пользователя. Дальше я продемонстрирую, как это можно сделать на реальном примере.
Оцените количество программ
Чтобы было интереснее, я предлагаю вам заглянуть в мою автозагрузку (на момент написания статьи). Автоматический запуск приложений может выполняться как из папки Автозагрузка, так и из различных разделов реестра. Для просмотра автозагрузки можно воспользоваться упомянутой выше утилитой msconfig.
Мне, впрочем, больше нравится AutoRuns от Sysinternals — ее окно можно развернуть во весь экран, не говоря уже о более широком функционале. В AutoRuns вкладка Logon выполняет ту же функцию, что и вкладка Автозагрузка утилиты msconfig.
Как видите, у меня загружается полтора десятка различных приложений, начиная от вышеупомянутого Adobe Reader Speed Launcher и заканчивая почтовым клиентом Thunderbird. Прежде чем приступать к распределению загрузки программ по времени, нужно определиться, какие из них вам не нужны сразу же после запуска системы и в каком порядке вы бы хотели их запускать — отложенный запуск этих приложений будет реализован с помощью планировщика задач.
Определите самое важное и измерьте скорость
Я навожу порядок в автозагрузке, . Применив его к своей автозагрузке, получаю:
- userinit.exe и explorer.exe — важнейшие системные приложения, их запуск необходим;
- ccapp.exe от Symantec обеспечивает автоматическую защиту — ее лучше иметь сразу;
- а вот vptray.exe нужен для доступа к панели управления антивирусом из области уведомлений (трея) — явно не первоочередная задача;
- почтовый клиент мне нужен сразу, поскольку я начинаю день с чтения почты;
- специализированные драйверы мыши и клавиатуры тоже нужны сразу
Но автоматическая загрузка практически всех остальных приложений и утилит хотя и нужна, но явно не с первых секунд работы системы. Вот их загрузку я и распределяю по времени — их автозапуск будет выполнять планировщик.
Предварительное тестирование
Чтобы проверить, действительно ли распределение автозапуска приложений ускоряет загрузку вашей ОС, имеет смысл замерить время загрузки Windows до и после отключения предполагаемых к распределению по времени программ. Это можно сделать с помощью журнала событий или .
Ежедневный запуск задачи до определенной даты с последующим удалением задачи из планировщика
При таком расписании задача запускается ежедневно до определенной даты. Когда дата последнего запуска достигнута задача удаляется из Планировщика.
Такое расписание запускает задачу каждый день начиная с 25-го июля и заканчивая 25-м августом, о чем говорят Дополнительные параметры, показанные на рисунке 21.
На рисунке 22 показаны настройки на вкладке “Параметры”, а именно то, что установлена галочка у пункта “Если повтор задачи не запланирован, удалять через” и выбрано значение “Немедлено”. Установка этой галки в совокупности с данным параметром приведет к тому, что задание, после последнего запуска будет удалено из Планировщика.