Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Батник на выключение компьютеров по сети. (http://forum.oszone.net/showthread.php?t=181492)

Hrust2010 26-07-2010 20:17 1461051

Батник на выключение компьютеров по сети.
 
Доброго времени суток!

Я не силен в этих вещах, поэтому прошу помощи.

Подскажите как написать батник для принудительного выключения нескольких компьютеров в локальной сети (если это конечно возможно), при помощи команды shutdown /m \\10.x.x.x

Спасибо за помощь!

deepred 26-07-2010 21:58 1461102

Hrust2010,

Выключить все станции в домене:

Код:

Echo on& Chcp1251 & CLS

Set "Domain=Mshome"

for /f %%a in ('"net view /domain:%Domain% | Find /i "\\""') ^
Do Shutdown /p /m %%a
pause

Выключить выборочно станции:

Код:

Echo on& Chcp1251 & CLS
Set machine1="pc1"
Set machine2="pc2"
...
Set machine4="pc4"

for /f "tokens=2 delims==" %%a in ('set machine') ^
Do Shutdown /p /m \\%%~a
pause

Используя WSH (*.vbs)

Код:

Dim OpSysSet, Flags
Dim IntErrlevel

  arrTargetComps = Array("Comp1","Comp2","Comp3")

    For Each strTargetComp In arrTargetComps

        Set OpSysSet = GetObject("winmgmts:{impersonationLevel=impersonate,(RemoteShutdown)}//" & strTargetComp ).ExecQuery("select * from Win32_OperatingSystem where Primary=true")


  ' 0-Logoff, 1-Shutdown, 2-Reboot, 4-Force
  ' 8-Power Off, 16-Force If Hung

          Flags      =  1 ' Выключаем
          IntErrlevel =  0

          For Each OpSys In OpSysSet
              OpSys.Win32Shutdown Flags,IntErrlevel
          Next

      Next

Пара примеров для vbs:
http://gallery.technet.microsoft.com...1-eace6ff99bcd
http://gallery.technet.microsoft.com...1-7c30388c1adb

Hrust2010 27-07-2010 10:53 1461350

Попробовал второй скрипт. Работает. Только есть один ньюанс.
Когда компьютер из списка станций уже рание выключен, батник на нем останавливается и долго обрабатывает. Можно ли избежать этого?

Спасибо!

deepred 27-07-2010 13:52 1461444

Hrust2010,

Вариант для расположения все станций в одном домене:
Код:

Echo off & Chcp 866 & CLS
Set machine1="pc1"
Set machine2="pc2"
::...
Set machine4="pc4"
Set machine5="HPPAVILION-PC"

Set "Dmn=Mshome"

for /f "tokens=2 delims==" %%a in ('set machine') ^
Do for /f %%b in ('"net view /domain:%Dmn% | Find /i "\\""') ^
Do if "\\%%~a"=="%%~b" (Shutdown /m \\%%~a)

pause

Если PC расположены в разных доменах, то в команде Net View следует
применить ключ /Network

Hrust2010 28-07-2010 11:24 1462064

Что - то не так.

Домен я свой указал. после запуска выводит сообщение
machine "pc1" powered off
machine "pc1" powered off
machine "pc1" powered off
machine "pc1" powered off
........................................
machine "pc2" powered off
machine "pc2" powered off
machine "pc2" powered off
.................................

Хотя кокраз эти машины были включены.
И после отработки батника машины продолжают работать

Rintok 04-08-2010 14:07 1466681

А чем тебе не нравится команда "shutdown"?


shutdown -s -f -m \\"Имя 1-ого компа, можно IP" -t 03
shutdown -s -f -m \\"Имя 2-ого компа" -t 03
shutdown -s -f -m \\"Имя 3-ого компа" -t 03

base 25-01-2011 14:51 1596909

как можно удаленно перевести компьютеры в спящий режим?

Petya V4sechkin 25-01-2011 15:29 1596940

Цитата:

Цитата base
как можно удаленно перевести компьютеры в спящий режим?

С помощью PsShutdown
Код:

psshutdown.exe \\имя_или_IP-адрес -d -t 0
или
Код:

psshutdown.exe \\имя_или_IP-адрес -h -t 0

base 26-01-2011 04:47 1597370

дело в том что этой командой необходимо гасить 4 компьютера при отключении электричества. программа гасит компьютеры по очереди.
когда один из компьютеров уже выключен, то программа пытается к нему подключится 1 минуту, при этом другие компьютеры не выключаются. в этом случает теряется слишком много времени.
как написать батник так чтобы команды на выключения выдавались всем компьютерам одновременно?

Petya V4sechkin 26-01-2011 10:29 1597459

Цитата:

Цитата base
программа пытается к нему подключится 1 минуту

Инструкцию почитайте, опция -n время_в_секундах

Цитата:

Цитата RTFM
-n Specifies timeout in seconds connecting to remote computers.


base 27-01-2011 04:27 1598056

Petya V4sechkin, я не против того чтоб минуту таймаут был) я хотел бы, чтоб задание на выключение подавалось всем компьютерам одновременно

base 27-01-2011 07:01 1598085

Hrust2010,
открываете блокнот, туда вставляете:
Код:

shutdown -s -f -m \\10.0.0.1 -t 03
shutdown -s -f -m \\10.0.0.2 -t 03
shutdown -s -f -m \\10.0.0.3 -t 03
...
shutdown -s -f -m \\10.0.0.n -t 03

с указанием нужных IP и сохраняете как komanda.cmd

base 27-01-2011 08:34 1598108

одновременный переход в спящий режим 4х компьютеров я сделал следующим образом:
основной файл:
Код:

start hibernate-1.bat
start hibernate-2.bat
start hibernate-3.bat
start hibernate-4.bat

и 4 файла с командой:
Код:

"C:\Program Files\PsShutdown\psshutdown.exe" \\192.168.1.X -h -t 0
Только в этом случае отработанные файлы hibernate-X.bat не закрывают окно командной строки. как это исправить?

amel27 27-01-2011 09:35 1598136

Код:

start "" "C:\Program Files\PsShutdown\psshutdown.exe" -s -f -m \\10.0.0.1 -t 03
start "" "C:\Program Files\PsShutdown\psshutdown.exe" -s -f -m \\10.0.0.2 -t 03
start "" "C:\Program Files\PsShutdown\psshutdown.exe" -s -f -m \\10.0.0.3 -t 03
...
start "" "C:\Program Files\PsShutdown\psshutdown.exe" -s -f -m \\10.0.0.n -t 03


Muslitel 01-12-2011 20:47 1807504

Осмелюсь продолжить данную тему.
Решил использовать следующий скрипт
Код:

shutdown -f -t 120 -s -m \\PC1
shutdown -f -t 120 -s -m \\PC2

Работает хорошо, но с багами, о которых прочитал здесь. Если компьютер уже был выключен, то скрипт зависает и можно идти гулять.
Почитал по поводу psshutdown.exe. Заинтересовался. Назрел вопрос.

Мне необходимо выключать избранные ПК в определенное время. К примеру компьютеры с именами PC1, PC2 и PC3. Выключить их надо в 18.30. При этом желательно, чтоб:
1. скрипт срабатывал в 18.00;
2. на рабочем столе пользователя появлялось уведомление о том, что ПК будет выключен через 30 минут;
3. время ожидания подключения к компьютеру было не более 10 секунд.
Если я правильно понимаю, то следует разместить psshutdown.exe на сервере. Например, в папке C:\Program Files\PsShutdown\. Сам скрипт тоже поместить на сервер и будет выглядеть он следующим образом:
Код:

start "Shutdown" "C:\Program Files\PsShutdown\psshutdown.exe" \\PC1 -s -f -t 1800 -n 10 -m "Компьютер будет выключен через 30 минут"
start "Shutdown" "C:\Program Files\PsShutdown\psshutdown.exe" \\PC2 -s -f -t 1800 -n 10 -m "Компьютер будет выключен через 30 минут"
start "Shutdown" "C:\Program Files\PsShutdown\psshutdown.exe" \\PC3 -s -f -t 1800 -n 10 -m "Компьютер будет выключен через 30 минут"

После этого, в планировщике задач просто оформить задачу запуска обработки данного скрипта и наслаждаться.

Или я чет путаю?

Iska 02-12-2011 03:05 1807728

Зачем «-s»?

Код:

-m "Компьютер будет выключен через 30 минут"
Понадобится научить пользователей не пугаться сообщения и сдвигать его в сторону, дабы продолжить работу. Больно долгое время ожидания, успеют забыть. А потом будет — «Ах, я не успел сохранить!».

Я бы сделал несколько иначе: запускал скрипт (с отправкой уведомления посредством «msg.exe») из Планировщика в 18:00, 18:10, 18:20. А скрипт на выключение — за минут пять до часа «X». Пяти минут должно быть вполне достаточно, чтобы сохранить все изменения и даже выключить машину самостоятельно.

Muslitel 02-12-2011 13:21 1807939

Можно и так, но на предприятии планируется поделить компы на три группы. первая группа - это ПК, которые будут принудительно выключаться в 18.30 (пользователи этих ПК по графику работают до 18.00). Вторая группа - ПК выключается в 21.00 (пользователи этой группы ПК работают по графику да 20.00). Третья группа - ПК, которые не отключаются.
Посему, думаю, что выскочившее окно будет напрягать не часто :).
Хотя... Все же Вы правы. Для часа Х в 18.30 лучше сделать уведомление в 18.00 через msg. А в 18.25 уже выполнить скрипт с ключом -m и сообщением.
Я, правда, не совсем понимаю, почему все же, написанный мною скрипт, не работает :(. Полночи убил, а как-то не хочет. Нет сообщения и ПК не выключается :( Пробовал пока локально все сделать на домашнем.

Iska 02-12-2011 16:09 1808054

Цитата:

Цитата Muslitel
Я, правда, не совсем понимаю, почему все же, написанный мною скрипт, не работает . Полночи убил, а как-то не хочет. Нет сообщения и ПК не выключается Пробовал пока локально все сделать на домашнем. »

Этот?
Код:

start "Shutdown" "C:\Program Files\PsShutdown\psshutdown.exe" \\PC1 -s -f -t 1800 -n 10 -m "Компьютер будет выключен через 30 минут"
start "Shutdown" "C:\Program Files\PsShutdown\psshutdown.exe" \\PC2 -s -f -t 1800 -n 10 -m "Компьютер будет выключен через 30 минут"
start "Shutdown" "C:\Program Files\PsShutdown\psshutdown.exe" \\PC3 -s -f -t 1800 -n 10 -m "Компьютер будет выключен через 30 минут"


Muslitel 02-12-2011 16:30 1808070

ага. он самый.
когда тестил его на работе - он исправно считал 10 секунд, когда натыкался на предварительно выключенный ПК и все. это единственный результат, которого мне удалось добиться :(

Iska 03-12-2011 03:47 1808399

Если убрать имя машины:
Код:

start "Shutdown" "C:\Program Files\PsShutdown\psshutdown.exe" \\PC1 -s -f -t 1800 -n 10 -m "Компьютер будет выключен через 30 минут"
для локальной машины код работает?

Точно ли указан путь:
Код:

"C:\Program Files\PsShutdown\psshutdown.exe"
Вы разворачивали не весь пакет «PsTools»?
Код:

C:\Program Files\PsTools\psshutdown.exe

Muslitel 15-12-2011 13:34 1815764

Убрал имя ПК, код не сработал. Ни уведомления, ни отключения нету.
Путь указан верно. Проверил только-что.
Нет. Не весь. Исключительно psshutdown.exe.

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

Muslitel 15-12-2011 15:41 1815854

Понял, в чем проблема. Утилита, походу, не работает под Windows 7. С ХР-юши запустил код:
start "Shutdown" "C:\Program Files\PsShutdown\psshutdown.exe" \\PC1 -s -f -t 1800 -n 10 -m "Компьютер будет выключен через 30 минут".
Все сработало. Сообщение было показано, комп выключился. Осталось решить проблему с Win7 (((
Как быть?

Petya V4sechkin 15-12-2011 16:42 1815905

Цитата:

Цитата Muslitel
не работает под Windows 7

Обычно требуется задать параметр LocalAccountTokenFilterPolicy.
Пример

Muslitel 15-12-2011 18:10 1815969

Задал этот параметр в реестре. Проверил, все ли сделал правильно. После чего попробовал запустить скрипт:
Код:

start "Shutdown" "C:\PsShutdown\psshutdown.exe" -u USERNAME -p PASSWORD -s -f -t 20 -m "Компьютер будет выключен через 30 минут"
Не прокатило. Попробовал:
Код:

start "Shutdown" "C:\PsShutdown\psshutdown.exe" -s -f -t 20 -m "Компьютер будет выключен через 30 минут"
Тоже глухо :(

Petya V4sechkin 15-12-2011 18:33 1815975

Muslitel, а чего вы в предыдущем посте запускаете для удаленного компьютера PC1, а сейчас на локальном?
Выполните от имени Администратора.

Параметр LocalAccountTokenFilterPolicy для запуска на удаленном компьютере с Windows 7 (там его и надо выставить).

Muslitel 15-12-2011 19:39 1816025

Petya V4sechkin, дело в том, что локальный ПК - это мой рабочий. Он на Win7. Вот я на нем и тестирую все по возможности. А удаленный - это соседний комп с ХР. Пардон, что голову морочу :).
На ХР все работает не зависимо от того, запускаю я скрипт локально или с удаленного ПК. На 7ке - только локально и только через командную строку, запущенную под локальным админом (учетка доменного админа не помогает). BAT-ник на 7ке отказывается работать.

Petya V4sechkin, благодаря Вам я понял, как потушить свой комп с помощью psshutdown, локально. Но тут же возникло несколько НО, касательно его выключения, когда скрипт запускается с удаленного компа. В моем случае это будет сервер.
Я пытаюсь с компа под управлением Windows XP выключить удаленный комп с Windows 7. Имеется код:
Код:

start "Shutdown" "C:\PsShutdown\psshutdown.exe" \\PC-Win7 -s -f -t 60 -m "Your computer will be shut down after 1 minute"
Я запускаю его и как bat-ник, и через командную строку, запущенную от имени администратора, а результата никакого. В открывающемся окне CMD запускается процесс подключения к компьютеру PC-Win7, потом окно закрывается и все.

Petya V4sechkin 15-12-2011 20:03 1816036

Цитата:

Цитата Muslitel
На 7ке - только локально и только через командную строку, запущенную под локальным админом (учетка доменного админа не помогает). BAT-ник на 7ке отказывается работать.

Что, в контекстном меню CMD-файла нет пункта "Запуск от имени администратора"?
Статью Упрощаем запуск приложений в Windows 7 от имени администратора без отключения UAC читали?

Цитата:

Цитата Muslitel
выключить удаленный комп с Windows 7

LocalAccountTokenFilterPolicy в Windows 7 выставьте.

Цитата:

Цитата Muslitel
потом окно закрывается и все

Не делайте так, чтобы оно закрывалось. Если хотите увидеть и прочитать сообщение об ошибке. Запустите cmd.exe ("от имени" не надо, если в XP) и выполните:
Код:

C:\PsShutdown\psshutdown.exe \\PC-Win7 -s -f -t 60 -m "Your computer will be shut down after 1 minute"

Muslitel 15-12-2011 23:22 1816151

Цитата:

Цитата Petya V4sechkin
Что, в контекстном меню CMD-файла нет пункта "Запуск от имени администратора"? »

Это есть. И за эту подсказку Вам благодарочка.
Цитата:

Цитата Petya V4sechkin
LocalAccountTokenFilterPolicy в Windows 7 выставьте. »

И это тоже сделал. Именно после того, как добавил запись в реестр, у меня получилось, запустив CMD от имени администратора, запустить успешно скрипт.
Т.е. у меня получилось запустить таймер выключения компа с Window 7 непосредственно с этого же компа - локально. А вот сделать это удаленно не получается. :(

Petya V4sechkin 16-12-2011 08:14 1816281

Muslitel, как уже было сказано, LocalAccountTokenFilterPolicy влияет только на удаленные подключения.

Цитата:

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

Muslitel 16-12-2011 12:07 1816421

Petya V4sechkin, я разобрался. Вам спасибо огромное!

Когда с другого компа (Windows XP) запустил CMD от имени администратора и попробовал запустить код:
Код:

C:\PsShutdown\psshutdown.exe \\PC-Win7 -s -f -t 60 -m "Your computer will be shut down after 1 minute"
, то в ответ получил:
Код:

C:\WINDOWS\system32>C:\PsTools\psshutdown.exe \\wks778k -s -f -t 40 -m "Your PC
will be shut down after 40 seconds"

PsShutdown v2.52 - Shutdown, logoff and power manage local and remote systems
Copyright (C) 1999-2006 Mark Russinovich
Sysinternals - www.sysinternals.com

Couldn't access WKS778K:
Tїюф т ёшёЄхьє эх яЁюшчтхфхэ: шь  яюы№чютрЄхы  шыш ярЁюы№ эх юяючэрэv.

При этом проверил:
1. LocalAccountTokenFilterPolicy добавил.
2. Брандмауэр отключен.
3. Анивирус Nod отключил вообще.

А потом понял, что рабочие станции находятся в домене. Попробовал запустить командную строку на компьютере с Windows XP от имени доменного админа. Попробовал тот же код:
Код:

C:\PsShutdown\psshutdown.exe \\PC-Win7 -s -f -t 60 -m "Your computer will be shut down after 1 minute"
и комп выключился через 40 секунд. :) Все проверил еще раз. Эврика!

Petya V4sechkin 16-12-2011 17:42 1816444

Цитата:

Цитата Muslitel
Couldn't access WKS778K:
Tїюф т ёшёЄхьє эх яЁюшчтхфхэ: шь яюы№чютрЄхы шыш ярЁюы№ эх юяючэрэv

Что означает: "Вход в систему не произведен: имя пользователя или пароль не опознаны".

Цитата:

Цитата Muslitel
А потом понял, что рабочие станции находятся в домене.

А в домене LocalAccountTokenFilterPolicy не нужен :)

Цитата:

Цитата Muslitel
Попробовал запустить командную строку на компьютере с Windows XP от имени доменного админа.

Зачем, ведь можно указать учетные данные в опциях PsShutdown.

Muslitel 16-12-2011 17:58 1816455

Цитата:

Цитата Petya V4sechkin
А в домене LocalAccountTokenFilterPolicy не нужен :) »

чьёрт побьери. ну ничего. зато запомнил, как это делается )))
Спасибо Вам еще раз :)

Muslitel 05-01-2012 15:35 1828979

Эмм... Рискну продолжить тему, так как возникли снова вопросы. В домене все работает исправно, как часики. Но есть беда. У меня пару машину находятся вне домена - workgroup. Вот к ним я достучаться не могу. Пробовал в скрипте указывать данные учетной записи админа - не помогло.
Откровенно говоря, я не совсем соображаю, как вообще к ним достучаться по удаленке, а тем более через скрипт :(.
Помогите, пожалуйста.

voler 02-03-2012 16:50 1870957

А если на ПК закрыт доступ через все кроме телнет? То как выключить ПК?
Код:

set sh=WScript.CreateObject("WScript.Shell")
sh.run "telnet 192.168.2.2 2323"
WScript.Sleep 500
sh.SendKeys "n"&vbcr
WScript.Sleep 500
sh.SendKeys "voler"&vbcr
WScript.Sleep 150
sh.SendKeys "pass"&vbcr
WScript.Sleep 150
sh.SendKeys "shutdown -r -t 10"&vbcr

Только вот это не отрабатывает -
HTML код:

sh.SendKeys "shutdown -r -t 10"&vbcr
Решил вопрос, проще скачал Telnet Script Executor
Запускаю так
Код:

TST10.exe /r:reboot.txt /o:output.txt /m
Конфиг такой
Код:

192.168.2.2 979
WAIT "Welcome to Microsoft Telnet Service "
SEND "n"
WAIT "login:"
SEND "voler\m"
WAIT "password:"
SEND "pass\m'
SEND "\m"
WAIT "C:\Documents and Settings\voler>"
SEND "shutdown -r -t 5\m"
SEND "\m"


clevergod 27-05-2015 10:03 2511881

####################################################
# Shutdown_Night.ps1 27/05/2015 PowerShell v3-4 made by ®clevergod and ToSHa
# Скрипт выключения ПК с отправкой отчета на мыльники.
# Данный скрипт собирает все ПК с домена, фильтрует исключения групп, пингует на доступность,тушит ПК и отправляет отчет на указанные емэйл
# учите PowerShell ребята!
####################################################

Скрытый текст
# Собираем ПК и фильтруем (править по себя)(добавлены 3 группы исключения Admins Servers и ЕЩЕ одна для допустим руководства)
$comps = Get-ADObject -LDAPFilter '(&(objectCategory=computer)(!memberOf=CN=Исключение,DC=company,DC=local)(!memberOf=CN=Admins,OU=Gro ups,DC=company,DC=local)(&(!memberOf=CN=Servers,OU=Servers,DC=company,DC=local)))' | Select -Expand Name
# Файл выгрузки (править по себя)
$file = New-Item -itemtype file "\\server\LOGS\TurnOff_Computers\Computers_ON.html" -Force
# Туловище HTML
Add-Content $file '<html><head>
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-8">
<title>System Status Report</title>
<style type="text/css">
<!--
BODY{background-color:#FFFFFF;}
TABLE{border-width: 1px;border-style: solid;border-color: black;}
TH{border-width: 1px;padding: 1px;border-style: solid;border-color: black;background-color:#1D92DC}
TD {border-width: 1px;padding: 2px;border-style: solid;border-color: black;background-color:#94BFE4}
TR {color:#000000;font-family:Tahoma;font-size:10pt;}
}
-->
</style>
<h2>Server Status</h2>
<p>The following report was run on $(get-date).</p>
<table>
<tr><th> Имя: </th><th>Статус компьютера:</th></tr>
'
# Цикл выключения ПК домена с пингом с подкрашиванием HTML nf,kbws
foreach ($comp in $comps)
{$ON = Get-WmiObject Win32_PingStatus -filter "Address=""$comp"""
if ($ON.StatusCode -eq 0) {$desc = Get-ADObject -LDAPFilter "(cn=$comp)" -Properties Description | Select -Expand Description | Out-String
Add-Content $file "<tr><td>$desc</td><td style='background-color:red; color:Yellow;'><strong>$comp Включен!</strong></td></tr>" | Stop-Computer -cn $comp -force }
Else
{$desc = Get-ADObject -LDAPFilter "(cn=$comp)" -Properties Description | Select -Expand Description | Out-String
Add-Content $file "<tr><td>$desc</td><td style='background-color:green; color:#FFFFFF;'>$comp выключен</td></tr>"}
}
Add-Content $file "</html>"
# Вложение тела HTML файла
$html = Get-Content '\\server\LOGS\TurnOff_Computers\Computers_ON.html' -raw
# мЁльнер (править по себя)
Send-MailMessage -smtpServer mail.company.kz -UseSSL -from 'Shutdown@company.kz' -to 'stanislav@company.kz' -subject "PoweredON" -body $html -Encoding UTF8 -BodyAsHTML #-Attachment $file #Раскоментить -Attachment $file если нужно вложение файла к письму

comsun 24-11-2015 15:25 2578480

shutdown -r -t с Вин 2к не работает! какие команды для Вин 2000?

p.s. разобрался.

cold123 13-10-2016 01:52 2677553

Ребят помогите, я не рублю особо в командной строке кому не сложно напишите как сделать чтоб при нажатие на батник открывалась командная строка с введенной командой "shutdown /s /t ***" что бы оставалось только время дописать?

Iska 13-10-2016 05:17 2677577

Код:

@echo off

set /p sTimeout=Enter timeout:
if defined sTimeout shutdown.exe /s /t %sTimeout%


cold123 13-10-2016 14:18 2677714

Спасибо большое!


Время: 11:38.

Время: 11:38.
© OSzone.net 2001-