Команда удалённой перезагрузки очень простая:
shutdown -r -f -t 0 -m \\имя-или-айпи-адрес-компа.
например, чтобы перезагрузить server1 надо выполнить
shutdown -r -f -t 0 -m \\server1
параметры:
-r означает что компьютер будет перезагружен (если поставить -s то будет выключен)
-f означает принудительное завершение открытых программ.
-t 0 означает время ожидания перед перезагрузкой в секундах, ноль - то есть нисколько не ждать.
-m имя - указание удалённого компьютера в сети, на который посылается команда. Если не указан этот ключ то команда адресуется к локальному компьютеру
Просмотреть хелп команды можно набрав shutdown /?
Теперь ВАЖНЫЙ момент: у текущего пользователя может не хватить прав доступа на выключение соседнего компьютера или сервера. Это лечится вот какой командой:
runas /env /user:Admin1 /savecred "shutdown -r -f -t 0 -m \\COMP"
Команда runas предназначена для запуска процессов от имени другого пользователя.
Вместо COMP надо подставить имя компьютера, вместо Admin1 - имя юзера, имеющего права администратора на компьютере COMP и как минимум права юзера на компьютере, с которого осуществляется вызов команды. Разумеется, и на том и на другом компьютере пароль для этого имени должен быть одинаковым.
-Самый простой вариант - использовать одно имя администратора и один пароль для всех компьютеров, тогда запутаться становится совершенно невозможно.
-Самый сложный вариант - если не хочется раздавать направо-налево права администратора, тогда можно создать на каждом компьютере специального юзера, дать ему ограниченные права, достаточные только для перезагрузки компьютеров - но это задачка скорее для сисадмина, нежели для рядового пользователя.
-Если компьютеры включены в домен, то проще всего во всех командах использовать учётку доменного администратора, либо использовать специального доменного юзера с правами на перезагрузку любого компьютера.
-Поясняю параметр /savecred , он предназначен для того, чтобы не требовалось вводить пароль каждый раз. Достаточно ввести пароль один раз, после этого система его запоминает, а в следующий раз команда выпонится уже без запроса пароля, на основе запомненных данных.
Вцелом скрипт массовой перезагрузки может выглядеть примерно так:
runas /env /user:Admin1 /savecred "shutdown -r -f -t 0 -m \\COMP1"
runas /env /user:Admin2 /savecred "shutdown -r -f -t 0 -m \\COMP2"
runas /env /user:Admin3 /savecred "shutdown -r -f -t 0 -m \\COMP3"
...
и так далее, по количествку компов.
Однако, при таком способе команды будут вызываться последовательно, то есть команда на перезагрузку последнего компьютера будет подана гораздо позже чем команда на перезагрузку первого компьютера в списке. Это тоже можно вылечить. Достаточно дописать в начале каждой команды магическое слово start и тогда все команды запустятся параллельно. То есть итоговый скрипт тотальной перезагрузки всех компьютеров будет выглядеть примерно так:
start runas /env /user:Admin /savecred "shutdown -r -f -t 0 -m \\COMP1"
start runas /env /user:Admin /savecred "shutdown -r -f -t 0 -m \\COMP2"
start runas /env /user:Admin /savecred "shutdown -r -f -t 0 -m \\COMP3"
p.s. иногда встречаются такие версии винды, которые упорно не желают воспринимать команду перезагрузки по сети. Чтобы это вылечить надо, во-первых, проверить настройку безопасности, которая отвечает за правила сетевой авторизации пользователей. В XP найти это можно так: открываем Control Panel -> Administrative tools -> Local Security Policy
Там ищем такую настройку:
Local Policies -> Security Options ->
Network access: Sharing and security model for local accounts
там надо включить режим "Classic" вместо "Guest only".
(по русски - Паналь управления -> Администрирование
Локальные параметры безопасности
Локальные политики -> Параметры безопасности ->
Сетевой доступ: модель совместного доступа... - здесь по умолчанию включено "Гостевая", надо включить "Обычная".
(если компьютеры в домене то делать это скорее всего не потребуется).
Разумеется, все компьютеры, которые мы хотим перезагружать через сеть, должны быть не зафаерволены от доступа из локальной сети!
Решив проблему доступа через локальную сеть все остальные препятствия можно преодолеть через использование утилиты psexec. Команда на удалённую перезагрузку в этом случае будет выглядеть так:
psexec \\IP -u Administrator -p password shutdown -r -f -t 0
Мне эта команда и помогла
Вместо IP подставляем IP-адрес компьютера, который отправляем в перезагрузку. Вместо Administrator и password - подставляем соответственно логин и пароль администратора того компьютера.
p.p.s. Волшебную утилиту psexec можно скачать прямо с майкрософта:
http://technet.microsoft.com/ru-ru/sysinternals/bb897553(en-us).aspx
p.p.p.s. Ещё можно по аналогии создать менее злую командочку, которая вместо перезагрузки просто автоматически лочит все компы. Тоже очень полезно в случае проверки - залоченость компов даёт некоторое время на принятие дальнейших решений. Если "волки" не знают паролей то для входа им понадобится либо выпытывать пароли у юзеров, либо требовать разлочить систему. А это всё драгоценное время, за которое можно принять какие-то меры.
Чтобы залочить комп по сети, достаточно выполнить следующую командочку (опять же с помошью утилиты psexec):
psexec \\IP -u Administrator -p password rundll32.exe user32.dll,LockWorkStation
Можете поиграться с залочиванием компьютера своего соседа
Если компьютеры находятся в домене, а вы имеете права администратора домена, попробуйте выполнить:
FOR %I IN (список) DO start psexec \\сетка.%I rundll32.exe user32.dll,LockWorkStation
где "сетка" - это начальные цифры IP-адреса вашей локальной сети, например, 192.168.0
ну а "список" - это последние цифры IP-адресов, через запятую.
Например, чтобы залочить компютеры с IP-адресами 192.168.0.5, 192.168.0.20 и 192.168.0.55 надо написать так:
FOR %I IN (5,20,55) DO start psexec \\192.168.0.%I rundll32.exe user32.dll,LockWorkStation
Кстати, есть неплохой способ рассылать текстовые оповещения на экраны соседних компьютеров, используя сочетание psexec и msg.
FOR %I IN (список) DO start psexec \\сетка.%I msg * "Текстовое сообщение"
например,
FOR %I IN (5,11) DO start psexec \\192.168.0.%I msg * "Можете входить в 1С (Администратор)"
будет послано сообщение на компьютеры 192.168.0.5 и 192.168.0.11
-можно задать параметр /TIME:секунды - это время, в течение которого сообщение показывается, потом оно исчезает. Если пользователь нажимает "ОК" то сообщение закрывается сразу. Есть смысл задавать параметр TIME, чтобы сообщение не висело дольше своего устаревания. К тому же, пока не закрыто предыдущее сообщение, следующие сообщения не выводятся, и если на том конце сидит "тупой юзер", который игнорирует сообщение, то он не получит следующее сообщение, пока не нажмёт ОК на предыдущем.
-даже если компьютер залочен, сообщение всё равно выскочит на экран. Если на экране крутится скринсейвер - поверх него выскочит!
-запуская msg * (со звездочкой) мы отправляем сообщение "во все сессии". Например, если в качестве IP-адреса указан адрес терминального сервера, на котором сидит параллельно несколько человек, то сообщение получит каждый.
-если компьютеры не в домене, придётся явным образом указывать логин-пароль административной учетки того компа, на который отправляется сообщение, то есть
psexec \\ip -u Administrator -p password msg * /TIME:600 Сообщение
p.s. Раньше для отправки сообщений на соседние компьютеры можно было использовать net send ( работает на базе службы messenger ), но сейчас эта служба по умолчанию выключена, видимо из-за спама.
А для выполнения msg служба messenger не требуется.
shutdown -r -f -t 0 -m \\имя-или-айпи-адрес-компа.
например, чтобы перезагрузить server1 надо выполнить
shutdown -r -f -t 0 -m \\server1
параметры:
-r означает что компьютер будет перезагружен (если поставить -s то будет выключен)
-f означает принудительное завершение открытых программ.
-t 0 означает время ожидания перед перезагрузкой в секундах, ноль - то есть нисколько не ждать.
-m имя - указание удалённого компьютера в сети, на который посылается команда. Если не указан этот ключ то команда адресуется к локальному компьютеру
Просмотреть хелп команды можно набрав shutdown /?
Теперь ВАЖНЫЙ момент: у текущего пользователя может не хватить прав доступа на выключение соседнего компьютера или сервера. Это лечится вот какой командой:
runas /env /user:Admin1 /savecred "shutdown -r -f -t 0 -m \\COMP"
Команда runas предназначена для запуска процессов от имени другого пользователя.
Вместо COMP надо подставить имя компьютера, вместо Admin1 - имя юзера, имеющего права администратора на компьютере COMP и как минимум права юзера на компьютере, с которого осуществляется вызов команды. Разумеется, и на том и на другом компьютере пароль для этого имени должен быть одинаковым.
-Самый простой вариант - использовать одно имя администратора и один пароль для всех компьютеров, тогда запутаться становится совершенно невозможно.
-Самый сложный вариант - если не хочется раздавать направо-налево права администратора, тогда можно создать на каждом компьютере специального юзера, дать ему ограниченные права, достаточные только для перезагрузки компьютеров - но это задачка скорее для сисадмина, нежели для рядового пользователя.
-Если компьютеры включены в домен, то проще всего во всех командах использовать учётку доменного администратора, либо использовать специального доменного юзера с правами на перезагрузку любого компьютера.
-Поясняю параметр /savecred , он предназначен для того, чтобы не требовалось вводить пароль каждый раз. Достаточно ввести пароль один раз, после этого система его запоминает, а в следующий раз команда выпонится уже без запроса пароля, на основе запомненных данных.
Вцелом скрипт массовой перезагрузки может выглядеть примерно так:
runas /env /user:Admin1 /savecred "shutdown -r -f -t 0 -m \\COMP1"
runas /env /user:Admin2 /savecred "shutdown -r -f -t 0 -m \\COMP2"
runas /env /user:Admin3 /savecred "shutdown -r -f -t 0 -m \\COMP3"
...
и так далее, по количествку компов.
Однако, при таком способе команды будут вызываться последовательно, то есть команда на перезагрузку последнего компьютера будет подана гораздо позже чем команда на перезагрузку первого компьютера в списке. Это тоже можно вылечить. Достаточно дописать в начале каждой команды магическое слово start и тогда все команды запустятся параллельно. То есть итоговый скрипт тотальной перезагрузки всех компьютеров будет выглядеть примерно так:
start runas /env /user:Admin /savecred "shutdown -r -f -t 0 -m \\COMP1"
start runas /env /user:Admin /savecred "shutdown -r -f -t 0 -m \\COMP2"
start runas /env /user:Admin /savecred "shutdown -r -f -t 0 -m \\COMP3"
p.s. иногда встречаются такие версии винды, которые упорно не желают воспринимать команду перезагрузки по сети. Чтобы это вылечить надо, во-первых, проверить настройку безопасности, которая отвечает за правила сетевой авторизации пользователей. В XP найти это можно так: открываем Control Panel -> Administrative tools -> Local Security Policy
Там ищем такую настройку:
Local Policies -> Security Options ->
Network access: Sharing and security model for local accounts
там надо включить режим "Classic" вместо "Guest only".
(по русски - Паналь управления -> Администрирование
Локальные параметры безопасности
Локальные политики -> Параметры безопасности ->
Сетевой доступ: модель совместного доступа... - здесь по умолчанию включено "Гостевая", надо включить "Обычная".
(если компьютеры в домене то делать это скорее всего не потребуется).
Разумеется, все компьютеры, которые мы хотим перезагружать через сеть, должны быть не зафаерволены от доступа из локальной сети!
Решив проблему доступа через локальную сеть все остальные препятствия можно преодолеть через использование утилиты psexec. Команда на удалённую перезагрузку в этом случае будет выглядеть так:
psexec \\IP -u Administrator -p password shutdown -r -f -t 0
Мне эта команда и помогла
Вместо IP подставляем IP-адрес компьютера, который отправляем в перезагрузку. Вместо Administrator и password - подставляем соответственно логин и пароль администратора того компьютера.
p.p.s. Волшебную утилиту psexec можно скачать прямо с майкрософта:
http://technet.microsoft.com/ru-ru/sysinternals/bb897553(en-us).aspx
p.p.p.s. Ещё можно по аналогии создать менее злую командочку, которая вместо перезагрузки просто автоматически лочит все компы. Тоже очень полезно в случае проверки - залоченость компов даёт некоторое время на принятие дальнейших решений. Если "волки" не знают паролей то для входа им понадобится либо выпытывать пароли у юзеров, либо требовать разлочить систему. А это всё драгоценное время, за которое можно принять какие-то меры.
Чтобы залочить комп по сети, достаточно выполнить следующую командочку (опять же с помошью утилиты psexec):
psexec \\IP -u Administrator -p password rundll32.exe user32.dll,LockWorkStation
Можете поиграться с залочиванием компьютера своего соседа
Если компьютеры находятся в домене, а вы имеете права администратора домена, попробуйте выполнить:
FOR %I IN (список) DO start psexec \\сетка.%I rundll32.exe user32.dll,LockWorkStation
где "сетка" - это начальные цифры IP-адреса вашей локальной сети, например, 192.168.0
ну а "список" - это последние цифры IP-адресов, через запятую.
Например, чтобы залочить компютеры с IP-адресами 192.168.0.5, 192.168.0.20 и 192.168.0.55 надо написать так:
FOR %I IN (5,20,55) DO start psexec \\192.168.0.%I rundll32.exe user32.dll,LockWorkStation
Кстати, есть неплохой способ рассылать текстовые оповещения на экраны соседних компьютеров, используя сочетание psexec и msg.
FOR %I IN (список) DO start psexec \\сетка.%I msg * "Текстовое сообщение"
например,
FOR %I IN (5,11) DO start psexec \\192.168.0.%I msg * "Можете входить в 1С (Администратор)"
будет послано сообщение на компьютеры 192.168.0.5 и 192.168.0.11
-можно задать параметр /TIME:секунды - это время, в течение которого сообщение показывается, потом оно исчезает. Если пользователь нажимает "ОК" то сообщение закрывается сразу. Есть смысл задавать параметр TIME, чтобы сообщение не висело дольше своего устаревания. К тому же, пока не закрыто предыдущее сообщение, следующие сообщения не выводятся, и если на том конце сидит "тупой юзер", который игнорирует сообщение, то он не получит следующее сообщение, пока не нажмёт ОК на предыдущем.
-даже если компьютер залочен, сообщение всё равно выскочит на экран. Если на экране крутится скринсейвер - поверх него выскочит!
-запуская msg * (со звездочкой) мы отправляем сообщение "во все сессии". Например, если в качестве IP-адреса указан адрес терминального сервера, на котором сидит параллельно несколько человек, то сообщение получит каждый.
-если компьютеры не в домене, придётся явным образом указывать логин-пароль административной учетки того компа, на который отправляется сообщение, то есть
psexec \\ip -u Administrator -p password msg * /TIME:600 Сообщение
p.s. Раньше для отправки сообщений на соседние компьютеры можно было использовать net send ( работает на базе службы messenger ), но сейчас эта служба по умолчанию выключена, видимо из-за спама.
А для выполнения msg служба messenger не требуется.