5

Мне нужно запускать пакетные сценарии при завершении работы Windows 10 Home Edition, как при ручном перезапуске, так и при автоматическом перезапуске из-за автоматических обновлений Windows. Это должно работать, пока ни один пользователь не вошел в систему. Пока что я пробовал:

  1. Запланированное задание в вечернее время 1047 (отброшено, не будет ждать, пока мой сценарий закончится).
  2. Добавление вручную сценариев завершения групповой политики в реестр и в C:\WINDOWS\SYSTEM32\GroupPolicy (отбрасывается, не запускается, поскольку похоже, что функциональность отключена ограничениями, наложенными выпуском Windows).
  3. Программное обеспечение сторонних производителей. Как ни странно, я не смог найти ни одного бесплатного инструмента, который работал бы как сервис и позволял бы мне добавлять .bat файлы, которые будут запускаться при выключении системы (или сервиса).
  4. Я попробовал AutoHotkey + NSSM [Менеджер неосасывающих сервисов] в качестве пользовательской службы, но события AutoHotkey не сработали бы каждый раз.

Я довольно разочарован этим ограничением.
Есть идеи?

Edit1: принять во внимание автоматические обновления Windows.
Edit2: это должно работать, пока никто не вошел в систему тоже.
Edit4: я жду следующего автоматического перезапуска Windows из-за обновления Windows, чтобы увидеть, работает ли запуск shutdown -a в начале пакетного файла, а затем shutdown -s в конце запланированной задачи при завершении события shutdown.
Edit5: Облом, это не сработало. Запланированное задание не запустилось: Ошибка: "Идет завершение работы". Я думаю, моя единственная надежда - сторонний инструмент.

2 ответа2

2

Я сделал это с AutoHotkey раньше. Этот скрипт протестирован и работает.

Я сделал базовый командный файл, который создаст "тестовый файл" на рабочем столе. Просто запустите файл AHK и оставьте его работающим. Когда скрипт обнаруживает завершение работы, он запускает пакетный файл.

Убедитесь, что вы указали путь к текстовому файлу в верхней части скрипта.

Скрипт AutoHotkey:

;==============================
;Set the path to your batch file.
path    := "C:\batch.bat"
;==============================

; Run script as admin. This will allow your batch file to be ran with admin priv.
if not A_IsAdmin
{
   Run *RunAs "%A_ScriptFullPath%"  ; Requires v1.0.92.01+
   ExitApp
}

; Only allow one instance of the script to run.
#SingleInstance, Force

; If you don't want an icon to show in the tray,
; remove the semicolon from the line below.
;#NoTrayIcon

; When script detects WM_QUERYENDSESSION (a shutdown), run OnShutDown function.
OnMessage(0x11, "OnShutDown")
return

OnShutDown(){
    ; Run the batch file.
    Run, % path
    ExitApp
}

Пакетный файл, который я использовал для тестирования:

echo Write file before shutdown > %USERPROFILE%\Desktop\ShutdownTest.txt

Если вы хотите, вы всегда можете выполнить команды командного файла напрямую через AHK.

0

Обновление: если это необходимо сделать до входа в систему следующего пользователя, его включение в сценарий запуска компьютера может удовлетворить ваши потребности. Если это что-то, что нужно сделать до выключения, сценарий выключения - ваш ответ.

Если домашняя версия не позволяет вам изменять локальную политику, чтобы эти сценарии работали, это является ограничением домашней версии, и вам может потребоваться обновление. Однако TechNet не ограничивает свое объяснение того, как настроить сценарий завершения работы за пределами Windows #.

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

Использовать пакетный скрипт для выключения? Просто используйте команду shutdown («shutdown -t 0») в конце вашего скрипта shutdown. Поставьте ярлык на скрипт на рабочем столе, используйте значок кнопки питания. (Удален ответ, основанный на отключении одного пользователя по сценарию вместо параметра выключения в меню «Пуск»).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .