Перезагрузить или выключить компьютер (JS)

Обсуждение вопросов программирования (WSH/JScript/VBScript, CMD), проблемы и решения
Ответить
nhutils
Сообщения: 595
Зарегистрирован: 09 дек 2009, 18:08
Контактная информация:

Перезагрузить или выключить компьютер (JS)

Сообщение nhutils »

Часто возникающий вопрос - как перезагрузить или выключить компьютер из командной строки, скрипта или командного файла.

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

Также можно настроить Назначенное задание, которое запускало бы скрипт в определённое время и тем самым перезапускало бы компьютер.

Имеются готовые программы, предоставляющие такие возможности, но при переносе скриптов на другой компьютер придётся устанавливать эти программы, что не всегда удобно. Помимо готовых программ, можно использовать возможности WSH, который всегда установлен на всех компьютерах и не требует установки дополнительных программ.

Выключить компьютер можно следующим скриптом:

Код: Выделить всё

var wmi = GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}\\\\.\\root\\cimv2");
var col_os = wmi.ExecQuery("Select * from Win32_OperatingSystem");
for(var i = new Enumerator(col_os); !i.atEnd(); i.moveNext())
  i.item().Win32Shutdown(1);
Точка в первой строке указывает на управление локальным компьютером. Если заменить её на сетевое имя другого компьютера, можно будет перезагрузить или выключить другой компьютер.
Можно доработать скрипт, чтобы сетевое имя компьютера задавалось параметром скрипта:

Код: Выделить всё

var computer_name = ".";
if (WScript.Arguments.length) 
  computer_name = WScript.Arguments(0);

var wmi = GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}\\\\"+
  computer_name+"\\root\\cimv2");
Параметр метода Win32Shutdown задаёт выполняемую функцию - перезагрузка, выключение и пр.:
0 (0x0) Log Off
4 (0x4) Forced Log Off (0 + 4)
1 (0x1) Shutdown
5 (0x5) Forced Shutdown (1 + 4)
2 (0x2) Reboot
6 (0x6) Forced Reboot (2 + 4)
8 (0x8) Power Off
12 (0xC) Forced Power Off (8 + 4)

Соответственно, заменив параметр 1 на 2, мы получим перезагрузку вместо выключения. Также в функции Win32Shutdown имеются режимы принудительного выполнения (Forced), которые принудительно закрывают работающие программы.
Например, если на момент выполнения скрипта с параметром 1 (0x1) Shutdown на компьютере работает MS Word с несохранённым документом, то MS Word откроет запрос о сохранении документа, и выключение не будет выполнено, пока пользователь не ответит на запрос - всё, как при обычном выключении вручную через Пуск - Завершение работы.
Если в такой же ситуации скрипт будет выполнен с параметром 5 (0x5) Forced Shutdown (1 + 4), то Windows принудительно закроет MS Word и выключится.

Подробнее об методе Win32Shutdown можно посмотреть здесь http://msdn.microsoft.com/en-us/library ... S.85).aspx
Вложения
Shutdown.zip
Скрипт SHUTDOWN.JS (комментарии в кодировке 1251)
Пример запуска SHUTDOWN.JS из CMD (комментарии в кодировке 866)
(1.11 КБ) 999 скачиваний
Ответить