Планувальник завдань Windows - виконайте завдання раз на день під час входу


3

Я намагаюся встановити завдання розкладу, щоб запустити exe рівно один раз на день. Я спробував таке:

Тригер щодня 4:00 ранку, "виконати завдання якнайшвидше після пропуску запланованого запуску"

Цей підхід чудово працює, якщо у мене не встановлено пароль у моєму обліковому записі, і в цьому випадку Windows завантажується безпосередньо на робочий стіл - після короткої затримки завдання запускається.

Коли я додав пароль до свого облікового запису, завдання більше не виконується. В історії завдань я бачу, як заносяться попередження:

Планувальник завдань не запустив завдання "X", оскільки користувач "Y" не входив у систему, коли були виконані умови запуску. Дія користувача: переконайтесь, що користувач увійшов або змінив визначення завдання, щоб дозволити запуск, коли користувач вийшов із системи.

Це здається дурним попередженням - у розділі "Параметри безпеки" вибрано "Запустити лише тоді, коли користувач увійшов". Чому Планувальник завдань намагається запустити завдання до входу користувача?

Запуск щодня 4:00 ранку та "увійти в систему", запустіть якомога швидше

Такий підхід не мав того ефекту, який я задумав, тобто я хотів, щоб обидві умови були істинними, тобто якщо "після 4:00 ранку щодня" є істинним, а "увійти" - істинним, то запустіть завдання; і для кожної наступної події "увійти" в цей день "після 4:00 щодня" не буде правдою, тому вона буде чекати наступного дня. На жаль, це не так, як працює Планувальник завдань, і при такому підході завдання виконується після кожного входу.

Запустити, чи користувач увійшов чи ні

Я не можу використовувати цей підхід, тому що exe, який я намагаюся запустити, іноді вимагає введення користувача, коли він закінчений. Загалом, існує ціла низка причин, з яких можна не використовувати цю опцію.

Інші варіанти

У царині відчайдушних обхідних шляхів я розглядаю можливість написання пакетного сценарію, який випише у файл і зможе виявити, чи був він викликаний раніше.

Напевно, повинен бути кращий спосіб досягти цього, здавалося б, звичайного і простого випадку планування використання?


@ 1Fish_2Fish_RedFish_BlueFish Це застаріла програма резервного копіювання під назвою VersionBackup. В основному він працює з вікном, яке відображає прогрес, і в кінці запуску з'являється вікно, якщо були якісь проблеми. На жаль, він не має документально підтверджених варіантів командного рядка. У Windows 7 у нього був вбудований спосіб запускатись лише раз на день, але після оновлення до Windows 10 це вже не працює. Тож якщо він запускається вдруге, він повторює процес резервного копіювання.
Джим

Ну тоді ви, можливо, зможете просто створити простий пакетний скрипт, ввести в нього деяку логіку, щоб спочатку перевірити файл "чек", який може бути названий чимось на зразок, VersionBackup_20160201.txtа якщо його НЕ існує, створіть його, а потім запустіть додаток. Якщо вона існує, то НЕ запускайте VersionBackup.exe і не закривайте. Таким чином ви забезпечуєте за день, наприклад, <YYYYMMDD>, що він запускається лише один раз і створює цей файл безпосередньо перед його запуском. Якщо ви інтестовані, у мене є приклад логіки сценарію, який я додам як відповідь, якщо ви думаєте, що це потенційно може бути рішенням, яке ви могли б використати або, принаймні, протестувати?
Pimp Juice IT

Окрім моїх вище коментарів, чи можете ви сказати, чи це веб-сайт та програмне забезпечення, яке ви використовуєте, і яку конфігурацію ви використовуєте, якщо так (наприклад, клієнт і сервер, майстер тощо)? sb-aw.com/download.html
Pimp Juice IT

@ 1Fish_2Fish_RedFish_BlueFish Спасибі, це було б корисно. Сайт, який ви знайшли, є правильним, я використовую "головну" версію, яка є їх непідприємницьким, споживчим інструментом.
Джим

Відповіді:


1

Виконайте завдання раз на день, увійшовши в систему

Я намагаюся встановити завдання розкладу, щоб запустити exe рівно один раз на день.

Я розглядаю можливість написання пакетного сценарію, який випише у файл і зможе виявити, чи його викликали раніше.

Гаразд, тому нижче наведений приклад з дуже базовою і простою логікою пакетного сценарію, як ви заявили в коментарі, може бути корисним у вашому випадку для проблем, з якими ви стикаєтесь.

Я також посилаюсь на інший пост (внизу цієї відповіді) на Планувальнику завдань з gotcha's і т. Д., На випадок, якщо у вас виникнуть додаткові проблеми із Планувальником завдань, який не працює, як очікувалося, під час виконання пакетного сценарію. Незважаючи на те, що параметри, які ви вибираєте конкретно в конфігурації, можуть бути різними, як і в ОС, мабуть, на цьому рівні є те саме, що все-таки є, тому також швидко погляньте на цю посаду, якщо у вас виникли проблеми з плануванням пакетів із програмою Task Scheduler не працює, як очікувалося.


Основна розбивка сценарію

  • FOR /FЦикл створює YYYYMMDDзмінний для використання на поточну дату.

  • Це CheckDirмісцевий шлях до диска або навіть UNC шлях, \\servername\sharename\folderякий ви будете YYYYMMDDщодня ставити цей невеликий контрольний файл із частиною його імені файлу.

    • Просто змініть C:\Pathабо підключіть шлях UNC до місця, де це має вказати у вашому оточенні
  • checkfileТільки ім'я файлу з %CheckDir%\перед ним , і %DT%додається до кінця цього перед розширенням .txt. Наприклад, це дасть вам остаточний результат C:\Path\VersionBackup_20130202.txtна сьогодні, як у моєму прикладі.

    • Це, по суті, перевірить, чи існує файл на сьогодні, якщо так, закінчіть скрипт, якщо він не існує, створіть його та запустіть VersionBackup.exe, як би це не називалося ім'я EXE. Таким чином, це може бути заплановано разом із Планувальником завдань один раз на годину, вказуючи на пакетний сценарій та за логікою пакетного сценарію, його можна буде виконувати лише один раз на день.
  • START "" "C:\Path\VersionBackup.exe"Просто потрібно вказати повний шлях , де ім'я EXE існує , що робить операцію резервного копіювання версії.

Приклад пакетного сценарію

@ECHO ON

:::: SET YYYYMMDD format for date
FOR /F "TOKENS=2-4 DELIMS=/ " %%A IN ("%DATE%") DO SET "DT=%%C%%B%%A"

:SetCheckFile
SET CheckDir=C:\Path
SET checkfile=%CheckDir%\VersionBackup_%DT%.txt
IF NOT EXIST "%CheckDir%" MD "%CheckDir%"
IF EXIST "%checkfile%" GOTO EOF
ECHO Creating the check file for date %DT% to ensure only one Version Backup run for the day>>"%checkfile%"

:StartApp
START "" "C:\Path\VersionBackup.exe"
GOTO EOF


Дякую, це працює! Я помітив у своїй системі, що% DATE% оцінює на 2016/02/02, тому я змінив цикл for наFOR /F "TOKENS=1-3 DELIMS=/ " %%A IN ("%DATE%") DO SET "DT=%%A%%B%%C"
Джим

0

Запустіть .exe в одну з таких папок, щоб запустити його, коли комп'ютер завантажиться. Вам не доведеться нічого робити в Планувальнику завдань.

Для лише поточного користувача:

C: \ Користувачі \ ім'я користувача \ AppData \ Роумінг \ Microsoft \ Windows \ Стартове меню \ Програми \ Запуск

Для всіх користувачів:

C: \ ProgramData \ Microsoft \ Windows \ Меню Пуск \ Програми \ Запуск

Сподіваюся, це допомагає!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.