Выполнение пакетного сценария в Windows 10 завершение работы / выход из системы / перезагрузка

1960
Henrik Nielsen

Прежде всего, извините. Это повторный пост моего первоначального вопроса, заданного на «stackoverflow», но я пытался заставить модераторов переместить его, потому что этот вопрос был скорее проблемой общего поведения окон, чем реальной проблемой кодирования, но безуспешно.

Но для бизнеса.

Я пытаюсь запустить BAT-скрипт, когда компьютер (под управлением Win10) получает команду на завершение работы, выход из системы или перезагрузку. Поскольку я иногда запускаю виртуальные машины (в VirtualBox), мой сценарий предназначен для поиска всех запущенных виртуальных машин, их приостановки и проверки того, что VM-интерфейсы все еще активны (поскольку это может привести к повреждению состояния паузы, требуется новая перезагрузка виртуальной машины). Скрипт протестирован и функционирует как задумано.

Моя проблема в том, что он запускается автоматически.

Я попытался добавить сценарий к GP в разделе «Конфигурация | Настройки Windows | Сценарии (вход / выход из системы) | Выход из системы», как было показано в предыдущих сообщениях. Казалось, это запускает выполнение скрипта, но не позволяет правильно завершить его перед выполнением фактического завершения работы.

Поэтому я продолжил поиск и в итоге изменил интересующее меня значение GP. В разделе «Конфигурация пользователя | Административные шаблоны | Система | Сценарии» я включил «Отображать инструкции в сценариях выхода из системы по мере их запуска». Это заставляет окна показывать командную строку и ждать ее закрытия, прежде чем продолжить выключение.

Но я все еще сталкиваюсь с проблемами. Моя текущая проблема заключается в том, что все вышеперечисленное все еще происходит с опозданием в процессе выключения. Когда я нажимаю кнопку выключения в меню «Пуск», мне сначала открывается всплывающее окно, информирующее меня о том, что у меня все еще есть запущенная программа (виртуальные машины), с возможностью принудительно остановить их. Только после этого (вынуждая мои виртуальные машины отключать не очень приятный способ), Windows фактически выполняет мой сценарий (который предназначался для сохранения виртуальных машин в надлежащем поместье).

Мой вопрос, поэтому, если есть способ, предпочтительно с использованием GP и / или планировщика задач, чтобы я мог заставить Windows выполнять мой BAT-скрипт (и ждать его завершения) при запуске shutdown / logoff / reboot, но до появляется сообщение «принудительно закрыть»?

С наилучшими пожеланиями Хенрик В. Нильсен

1
Какой виртуальный сервис вы используете? У меня была та же проблема с использованием Oracle VM, и, хотя невозможно решить сценарий по проблеме выключения, используя программу под названием безголовый трей, которая предназначена для попытки обычного сохранения состояния виртуальной машины при выключении и задержке выключения Windows, кажется, помогать. Для обновлений Windows мне пришлось перенастроить серверы, чтобы отложить перезагрузку, проверить, запланирована ли перезагрузка, затем запустить мой сценарий и выполнить саму перезагрузку. LPChip 6 лет назад 1
Разве виртуальный ящик не имеет возможности автоматически сохранять виртуальные машины при выключении системы? Как сказал LPChip, вы не можете заставить скрипт выключения запускаться в нужное время при завершении работы, чтобы выполнить то, что вы пытаетесь. Twisty Impersonator 6 лет назад 0
LPChip: это также проблема VirtualBox. Я хотел бы услышать больше о вашем решении. Твисти: Не то, чтобы я нашел. У меня кто-нибудь знает такую ​​особенность, я весь в ушах. Henrik Nielsen 6 лет назад 0

1 ответ на вопрос

0
Alz

Голь на выдумки хитра. Не уверен, что это применимо в случае вашей виртуальной машины, но:

Мой ответ для Windows 10 с использованием gpedit.msc и настройкой сценариев выхода из системы состоял в том, чтобы создать отдельный файл ping cmd с «ping -n 5 127.0.0.1», запущенным после критического. Это позволило моему «критическому» сценарию выхода из системы работать нормально.

Привет Алз, я не уверен, что понимаю, куда ты идешь с этим? Вы говорите, что в gpedit.msc (logoff) m вы добавляете два сценария: один, который вы хотите запустить, и второй, который просто пингует локальный хост? Если выше не правильно, пожалуйста, уточните. Если вышеупомянутое правильно, я не уверен, что это будет работать для меня. Как написано, у меня нет проблем с неисполнением всего моего скрипта, однако скрипт выполняется до конца в seq завершения работы (после принудительного закрытия открытой программы уже выполнено), и в этом заключается проблема. Henrik Nielsen 5 лет назад 0
Извините за задержку с ответом. Я отвечал против: «Это, казалось, начало выполнения скрипта, но не позволяло ему правильно завершиться перед выполнением фактического выключения». Да, у меня есть два отдельных сценария в gpedit.msc в разделе «Конфигурация пользователя» / «Настройки Windows» / «Сценарии». Один выполняет команду завершения работы, а второй выполняет команду ping, что замедляет процесс завершения работы настолько, чтобы мой первый сценарий успешно завершился. Одна вещь, чтобы отметить, хотя. Я использую расширения .cmd, а не расширения .bat, и расширение может иметь значение из-за вызванного интерпретатора сценариев. Alz 5 лет назад 0

Похожие вопросы