Автор Тема: Net Send  (Прочитано 2731 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Faust

  • Ветеран
  • *****
  • Сообщений: 4302
  • Карма: 107
  • Пол: Мужской
  • Bla-bla-bla, mr. Freeman...
    • Просмотр профиля
Net Send
« : 21.11.07, 13:53:41 »
Есть n-количество компов.
Надо скидывать краткую информацию, например, выключите компутер.
Пользую стандартное виндовое net send. Создал bat, чтобы слал на все машины.
Проблема в том, что если комп не в сети, т.е. выключен, то проходит очень много времени, прежде чем остальные сообщения отправятся. Возможно ли отправлять сообщения только тем компам, что в сети есть и как? В виндовой справке что-то ничего не нашел... помогите плз )


Оффлайн DafT

  • VIP
  • Ветеран
  • *****
  • Сообщений: 8535
  • Пол: Мужской
    • Просмотр профиля
Re: Net Send
« Ответ #1 : 21.11.07, 14:00:01 »
Есть n-количество компов.
Надо скидывать краткую информацию, например, выключите компутер.
Пользую стандартное виндовое net send. Создал bat, чтобы слал на все машины.
Проблема в том, что если комп не в сети, т.е. выключен, то проходит очень много времени, прежде чем остальные сообщения отправятся. Возможно ли отправлять сообщения только тем компам, что в сети есть и как? В виндовой справке что-то ничего не нашел... помогите плз )

воспользуйся IChat. думаю будет намного удобнее и проще.
War, war never changes........ (c)

Оффлайн Faust

  • Ветеран
  • *****
  • Сообщений: 4302
  • Карма: 107
  • Пол: Мужской
  • Bla-bla-bla, mr. Freeman...
    • Просмотр профиля
Re: Net Send
« Ответ #2 : 21.11.07, 14:12:33 »
воспользуйся IChat. думаю будет намного удобнее и проще.
Не совсем подходит... =(

Неужели в винде нельзя реализовать обычное условие if... then... ???

Alexion

  • Гость
Re: Net Send
« Ответ #3 : 21.11.07, 14:17:31 »
Спросите у Матрикса))
Он в свое время программульку писал с огроным потенциалом. Отправка через нет сенд. Выбор компьюетров куда слать, повторная отправка, зацикливание, кароч дофига всего))

Оффлайн LEO

  • Ветеран
  • *****
  • Сообщений: 4417
  • Карма: 310
  • Пол: Мужской
    • Просмотр профиля
Re: Net Send
« Ответ #4 : 21.11.07, 16:29:45 »
юзай start

вот для проверки сделал у себя так:

start net send 192.168.0.2 lala
echo 1
start net send 192.168.0.2 bla bla
echo 2
pause

у меня messenger вырублен, и лень проверять полностью, но вроде работает - net send октрывается в новом окне, а батник продолжает выполнятся

зы. проверил.
start pause
echo 1
start pause
echo 2
pause

открывается два окна с паузой, а батник выводит 1 2 и все ок =)


>Проблема в том, что если комп не в сети, т.е. выключен, то проходит очень много времени, прежде чем остальные сообщения отправятся. Возможно ли отправлять сообщения только тем компам, что в сети есть и как?

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


и еще... а как ты через net send компы вырубаешь?! я тоже так хочу! )) или это просто сообщение юзеру, чтоб он комп вырубил??

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

вот юзер удивится когда увидит такое =)
« Последнее редактирование: 21.11.07, 16:57:38 от LEO »
http://is.gd/fpTeSMПродам книжки про Ajax и ASP.NET, http://is.gd/lDL64HПриглашаю в Dropbox

Оффлайн Faust

  • Ветеран
  • *****
  • Сообщений: 4302
  • Карма: 107
  • Пол: Мужской
  • Bla-bla-bla, mr. Freeman...
    • Просмотр профиля
Re: Net Send
« Ответ #5 : 22.11.07, 08:40:30 »
>>Надо скидывать краткую информацию, например, выключите компутер.
>и еще... а как ты через net send компы вырубаешь?! я тоже так хочу! )) или это просто сообщение юзеру, чтоб он комп вырубил??

Просто сообщение =) Чтобы вырубил =) Вкл выкл и прочие полезные штуки через RAdmin =)


>А как ты себе это представляешь? Может я отстал от жизни, но я думал, что узнать комп в сети или нет можно только по таймауту, истечения которого ты так не хочешь ждать =) ... или с помощью какого-нить спец. сервиса... который работает вышеописанным способом )))

Представляю себе так: снизить ожидание до 2-3сек ;)

>есть замечательная комманда shutdown, которая умеет вырубать удаленные компы при наличии там админиских прав.
RA =)

>вот юзер удивится когда увидит такое =)
Ещё больше удивляются, когда мышка сама бегает и буковки печатаюцо о.О
=))))))

===
юзай start

вот для проверки сделал у себя так:

start net send 192.168.0.2 lala
echo 1
start net send 192.168.0.2 bla bla
echo 2
pause

у меня messenger вырублен, и лень проверять полностью, но вроде работает - net send октрывается в новом окне, а батник продолжает выполнятся

зы. проверил.
start pause
echo 1
start pause
echo 2
pause
===

Вот за это пасипа ;)
Ззы=) 40 окошек %)

Оффлайн Дагон

  • Старожил
  • ****
  • Сообщений: 936
  • Карма: 128
  • Пол: Мужской
  • Smile =)
    • Просмотр профиля
Re: Net Send
« Ответ #6 : 22.11.07, 17:24:10 »
Use LanSend, Luke
You and me are the same
We don't know or care who's to blame
But we know that whoever holds the reins
Nothing will change
Our cause has gone insane

Оффлайн LEND

  • Пользователь
  • **
  • Сообщений: 95
  • Карма: 155
  • Истина как всегда где-то рядом
    • Просмотр профиля
Re: Net Send
« Ответ #7 : 30.11.07, 20:53:20 »
Faust
Я вчера только случайно наткнулся на эту тему и поэтому запаздало пишу. Увы, здесь с помощью bat файлов не всегда можно решить эту задачу. Я написал такую программу которая ВАМ бы подошла на VBS. Я нашел один класс WMI, который проверяет - находится ли компьютер в сети.
Это Win32_PingStatus.

Свойства класса Win32_PingStatus:
  Address
  BufferSize
  NoFragmentation
  PrimaryAddressResolutionStatus
  ProtocolAddress
  ProtocolAddressResolved
  RecordRoute
  ReplyInconsistency
  ReplySize
  ResolveAddressNames
  ResponseTime
  ResponseTimeToLive
  RouteRecord
  RouteRecordResolved
  SourceRoute
  SourceRouteType
  StatusCode
  Timeout
  TimeStampRecord
  TimeStampRecordAddress
  TimeStampRecordAddressResolved
  TimestampRoute
  TimeToLive
  TypeofService

Нам необходимо свойство Address - проверить есть ли такой компьютер в этой в сети.
Так же, свойство StatusCode - Присутствие его в сети. И еще нам понадобиться написать функцию отправления сообщения. Для этого удачно подходит метод Run с коммандой MS-DOS и в качестве параметра Net т.е.
 WshShell.Run "Net Send" & NAME & Message,0,False
Еще, на всех компьютерах должна быть запущена "Служба сообщений". Но я думаю ВЫ это знаете. Теперь дальше. Я работаю с "ДОМЕННОЙ СЕТЬЮ" и писал эту программу под нее. После того как написал, пробовал. Все здорово получается. На проверку где то 20 компьютеров и передачу сообщений уходят секунды. Конечно все зависит от самой сети и мощностей компьютеров. Программа находит компьютеры которые в сети и отправляет им сообщения. Под конец выводит список всех компьютеров в ДОМЕНЕ  со статусом "в сети" или "не в сети" в текстовый файл ListDomenComp.txt по маршруту C:\Temp а потом на экран с помощь NOTEPAD

Привожу листинг программы.

'*******************************************************************
' File:    NetSendComputer.vbs (VBScript)
' Author:  LEND
' Проверка наличия компьютеров в сети, отправка сообщений.
' Вывод списка компьютеров со статусом "в сети" или "не в сети" в
' текстовый файл ListDomenComp.txt а потом на экран с помощью NOTEPAD.
'*******************************************************************
Option Explicit
Dim strDomainSet
Dim WshNetWork
Dim strDomainUser
Dim strDomain
Dim objDomain
Dim kolComp
Dim objComputer
Dim m
Dim WshShell
Dim FSO
Dim FOut
Dim theNotepad
Const ForWriting = 2
Dim objPing
Dim objStatus
Dim Host
Dim KolOk
Dim KolNo
Dim TITLE
Dim sMessage
Dim dl
Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")
TITLE ="Подача сообщений по сети"
sMessage = InputBox("Введите сообщение",TITLE)
if sMessage="" then
 WScript.Quit
end if


'==== Функция для записи имен компьютеров сети в файл  ========
Sub TextOut (m, File)
  ' Открываем выходной файл для записи
  Set  FOut = FSO.OpenTextFile(File,ForWriting,true)
  ' Записываем текстовую строку в файл
   FOut.WriteLine m
  ' Закрываем выходной файл
   FOut.Close
End Sub
'======== функция отсылки сообщения на заданный компьютер ============
Sub FuncSendMessage(CompName1,sMessage1)
   Const Netsend = "%COMSPEC% /C %SystemRoot%\system32\NET.EXE SEND"
   Const WindowStyle = 0
   Const WaitOnReturn = False
   Dim sCommand
   sCommand = Netsend & " " & CompName1  & " " & sMessage1
   Dim oSh
   Set oSh = CreateObject("WScript.Shell")
   oSh.Run sCommand, WindowStyle, WaitOnReturn
   'Set oSh = Nothing
   ' WScript.Echo "Отослано"
End Sub
'======================================================================


Set WshNetWork=WScript.CreateObject("WScript.NetWork")
strDomainSet=WshNetWork.UserDomain    ' Определяем домейн
strDomainUser=WshNetWork.ComputerName ' Имя компьютера с которого посылается
                                      ' сообщение
WScript.Echo "Имя компьютера с которого запущено сообщение - " & strDomainUser
strDomain="WinNT://" & strDomainSet   ' Полностью указан Домен
WScript.Echo "Домен " & StrDomain
Set objDomain=GetObject(strDomain)    ' Вызываем данные домена
WScript.Echo "Домен: " & objDomain.name
objDomain.Filter=Array("computer")    ' Выводим имена компьютеров в ДОМЕНЕ

m="Просмотр компьютеров домене " & VbCrLf
kolComp=0  'Переменная определяющая кол. компьютеров в домене
  KolOk=0 'Количество отвечающих на пинг машин
  KolNo=0 'Количество не отвечающих на пинг машин
FOR Each objComputer in objDomain
    kolComp=kolComp+1 'Считаем количество компьютеров
    ' Служба WMI
     Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}")._
     ExecQuery("select * from Win32_PingStatus where address = '" &_
     objComputer.name & "'")

      For Each objStatus in objPing
        ' Смотрим что выдает и обрабатываем ответ
         If IsNull(objStatus.StatusCode) or objStatus.StatusCode <> 0 Then
           Host=objStatus.StatusCode & " off"
         Else
            Host="on"
         End If
         
         If Host="on" then
            KolOk=KolOk+1
             dl=30-len(objComputer.name)
             m=m+objComputer.name & space(dl) & " Есть в сети." & VbCrLf
             WshShell.Popup "Проверяется компьютер - " & objComputer.name &_
              " в сети." & chr(13) & "Сообщение отправлено",1,"Проверка",64

               FuncSendMessage objComputer.name,sMessage ' Функция отправления сообщений
         Else
             KolNo=KolNo+1
             dl=30-len(objComputer.name)
             m=m+objComputer.name & space(dl) & " Нет." & VbCrLf

             WshShell.Popup "Проверяется компьютер - " & objComputer.name &_
              " не в сети.",1,"Проверка",64
         End If 
     Next
NEXT



 if KolComp=0 then
   WScript.Echo "У " & strDomainUser & " нет доступа к домену " & StrDomain
   WScript.Quit
 end if
 m=m & VbCrLf
 m=m & "Всего:" & KolComp & VbCrLf
 m=m & "Всего отвечающих на ПИНГ " & KolOk & VbCrLf
 m=m & "Всего не отвечающих на ПИНГ " & KolNo
' Файл запишется в корневую директорию C:\Temp\ListDomenComp.txt - Выбери сам куда
TextOut m,"C:\Temp\ListDomenComp.txt"
'Открываем созданный файл в Блокноте и выводим полученные данные на экран
Set theNotepad = WshShell.Exec("notepad " & "C:\Temp\ListDomenComp.txt" )
'*******************************************************************

Если у тебя не ДОМЕННАЯ СЕТЬ то надо пробовать - возможно подойдет.

Файл упакован в нижеприведенный архив NetSendComp.rar


Попробуй.
С уважением LEND
« Последнее редактирование: 30.11.07, 21:01:46 от LEND »
В мире временном, сущность которого - тлен,
Не сдавайся вещам несущественным в плен. © О.Х.

Оффлайн X-Matrix

  • Ветеран
  • *****
  • Сообщений: 6187
  • Карма: 1788
  • Пол: Мужской
  • где я. куда я.
    • Просмотр профиля
Re: Net Send
« Ответ #8 : 01.12.07, 08:01:35 »
Спросите у Матрикса))
Он в свое время программульку писал с огроным потенциалом. Отправка через нет сенд. Выбор компьюетров куда слать, повторная отправка, зацикливание, кароч дофига всего))

гг...
что вспомнил  ;D ;D

я уж даж не помню сохранилась ли она у мя дома. Написана была чисто на работе и для работы  ;D

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

там было проще  ;D

если делать здесь - нужно много дополнять
да и NetBios думаю включен далеко не у всех.
Net send через него идёт ведь?
LifeAtSpace.ru : творческий Космический Портал. Мы тебя ждём :)

Оффлайн Faust

  • Ветеран
  • *****
  • Сообщений: 4302
  • Карма: 107
  • Пол: Мужской
  • Bla-bla-bla, mr. Freeman...
    • Просмотр профиля
Re: Net Send
« Ответ #9 : 01.12.07, 12:56:05 »
Сеть доменная. Привязка имени и ИП к каждому компу.
В принципе, подходит и start net send =)

Оффлайн LEND

  • Пользователь
  • **
  • Сообщений: 95
  • Карма: 155
  • Истина как всегда где-то рядом
    • Просмотр профиля
Re: Net Send
« Ответ #10 : 03.12.07, 22:33:12 »
LEO
<<и еще... а как ты через net send компы вырубаешь?! я тоже так хочу! ))
 или это просто сообщение юзеру, чтоб он комп вырубил??>>



Написал программу для перезагрузкии и выключения компьютера в ДОМЕННОЙ СЕТИ.
Т.е. дописал предыдущую программу.
Проверял - получается.
1) Сначала предупреждаем - шлем сообщение о перезагрузке(выключения).
Для примера:
Внимание! Сейчас компьютер будет выключен (перезагружен).

2) Потом: На своем мониторе тоже видим сообщение допустим:
Компьютер Ivayov будет выключен.
  или
Компьютер Ivanov будет перезагружен.

Нажимаеи Ok и компьютер под именем Ivanov будет выключен (перезагружен). Можно убрать 2 предупреждение, тогда на всех компьютерах которые доступны в сети появиться сообщение:
Внимание! Сейчас компьютер будет выключен (перезагружен).
И после этого все компьютеры будут перезагружены (выключены).

Но есть одно но. Если компьютер хоть и имеет доступ, но не может совершить этот процесс(перезагрузку или выключение), то на этом компьютере не включены соответствующие службы. Поэтому программа предупредит
   
                  MsgBox "Внимание!" & VbCrLf &_
                   "Компьютер " & objComputer.name & VbCrLf &_
                   "есть в сети но нет к нему доступа." & VbCrLf &_
                   "Возможно не включена служба:" & VbCrLf &_
                   "Диспетчер удаленного доступа и др." & VbCrLf &_
                   "соответствующие службы",vbSystemModal

Если включите соответствующие службы, то процесс (перезагрузка или выключение) произойдет нормально.
Как отключить ненужные строки - заремачить т.е. поставить ' (АПОСТРОФ)

Привожу листинг такой программы. 


'*******************************************************************
' File:    NetSendAllComp.vbs (VBScript)
' Author:  LEND
' Проверка наличия компьютеров в сети, отправка сообщений, выключение,
' перезагрузка компьютеров в сети.
' Вывод списка компьютеров со статусом "в сети" или "не в сети" в
' текстовый файл ListDomenComp.txt а потом на экран с помощью NOTEPAD.
'*******************************************************************
Option Explicit
Dim strDomainSet
Dim WshNetWork
Dim strDomainUser
Dim strDomain
Dim objDomain
Dim kolComp
Dim objComputer
Dim m
Dim WshShell
Dim FSO
Dim FOut
Dim theNotepad
Const ForWriting = 2
Dim objPing
Dim objStatus
Dim Host
im KolOk
Dim KolNo
Dim TITLE
Dim sMessage
Dim strNameSpace
Dim strClass
Dim LocOurComputer
Dim objClass
Dim dl
Dim colInstances
Dim objInstance
Const TargetMean=" для выяснения доступных машин для мониторинга служб"
Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")
TITLE ="Подача сообщений по сети"
sMessage = InputBox("Введите сообщение",TITLE)

if sMessage="" then
 WScript.Quit
end if 

'========= Функция для записи доступных компьютеров сети в файл ==========
Sub TextOut (m, File)
  ' Открываем выходной файл для записи
  Set  FOut = FSO.OpenTextFile(File,ForWriting,true)
  ' Записываем текстовую строку в файл
   FOut.WriteLine m
  ' Закрываем выходной файл
   FOut.Close
End Sub
'======== функция отсылки сообщения на заданный компьютер ============
Sub FuncSendMessage(CompName1,sMessage1)
   Const Netsend = "%COMSPEC% /C %SystemRoot%\system32\NET.EXE SEND"
   Const WindowStyle = 0
   Const WaitOnReturn = False
   Dim sCommand
   sCommand = Netsend & " " & CompName1  & " " & sMessage1
   Dim oSh
   Set oSh = CreateObject("WScript.Shell")
   oSh.Run sCommand, WindowStyle, WaitOnReturn
   'Set oSh = Nothing
   ' WScript.Echo "Отослано"
End Sub
'======================================================================


Set WshNetWork=WScript.CreateObject("WScript.NetWork")
strDomainSet=WshNetWork.UserDomain    ' Определяем домен
strDomainUser=WshNetWork.ComputerName ' Имя компьютера с которого посылается
                                      ' сообщение
WScript.Echo "Имя компьютера с которого запущено сообщение - " & strDomainUser
strDomain="WinNT://" & strDomainSet   ' Полностью указан Домен
WScript.Echo "Домен " & StrDomain
Set objDomain=GetObject(strDomain)    ' Вызываем данные домена
WScript.Echo "Домен: " & objDomain.name
objDomain.Filter=Array("computer")    ' Выводим имена компьютеров в ДОМЕНЕ

m="Просмотр компьютеров домене " & VbCrLf
kolComp=0  'Переменная определяющая кол. компьютеров в домене
  KolOk=0 'Количество отвечающих на пинг машин
  KolNo=0 'Количество не отвечающих на пинг машин
FOR Each objComputer in objDomain
    kolComp=kolComp+1 'Считаем количество компьютеров
    ' Служба WMI
     Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}")._
     ExecQuery("select * from Win32_PingStatus where address = '" &_
     objComputer.name & "'")

      For Each objStatus in objPing
        ' Смотрим что выдает и обрабатываем ответ
         If IsNull(objStatus.StatusCode) or objStatus.StatusCode <> 0 Then
           Host=objStatus.StatusCode & " off"
         Else
            Host="on"
         End If
         
         If Host="on" then
            KolOk=KolOk+1
             dl=30-len(objComputer.name)
             m=m+objComputer.name & space(dl) & " Есть в сети." & VbCrLf
             WshShell.Popup "Проверяется компьютер - " & objComputer.name &_
              " в сети." & chr(13) & "Сообщение отправлено",1,"Проверка",64

'&&&&&&&&&&&  Отсылаем сообщение пользователю и перезагружаем его компьютер &&&
               FuncSendMessage objComputer.name,sMessage 'Отсылаем сообщение
                 strNameSpace="Root\CIMV2"
                 strClass="Win32_OperatingSystem"
                 On Error Resume Next
                 Set objClass=GetObject("WinMgmts:{(ShutDown,RemoteShutdown)}\\" &_
                 objComputer.name & "\" & strNameSpace & ":" & strClass)

               if Err <> 0 Then ' Если компьютер не обозначен в удаленном доступе
                  MsgBox "Внимание!" & VbCrLf &_
                   "Компьютер " & objComputer.name & VbCrLf &_
                   "есть в сети но нет к нему доступа." & VbCrLf &_
                   "Возможно не включена служба:" & VbCrLf &_
                   "Диспетчер удаленного доступа и др." & VbCrLf &_
                   "соответствующие службы",vbSystemModal
               else ' Если компьютер не обозначен в удаленном доступе
                      'Err.clear
                      'On Error GoTo 0

                if strDomainUser<>objComputer.name then 'Проверка на совпадение
                  Set colInstances=objClass.Instances_   
                  ' Смотрим
                  for Each objInstance In colInstances
'Тут выберите что Вам надо и заремачьте что не надо         
'Заремачить - поставить ' (апостроф)
 
                     'msgBox "Компьютер " & objComputer.name &_
                     '       " будет перезагруен",vbSystemModal

                     msgBox "Компьютер " & objComputer.name &_
                            " будет выключен",vbSystemModal


                     'objInstance.Reboot()   'Перезагрузка компьютеров
                     objInstance.Shutdown() 'Выключение компьютера

                  next
                end if 'Проверка на совпадение
              end if  ' Если компьютер не обозначен в удаленном доступе
           Err.clear
           On Error GoTo 0
'&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

         Else
             KolNo=KolNo+1
             dl=30-len(objComputer.name)
             m=m+objComputer.name & space(dl) & " Нет." & VbCrLf
             WshShell.Popup "Проверяется компьютер - " & objComputer.name &_
              " не в сети.",1,"Проверка",64
         End If 
     Next
NEXT



 if KolComp=0 then
   WScript.Echo "У " & strDomainUser & " нет доступа к домену " & StrDomain
   WScript.Quit
 end if
 m=m & VbCrLf
 m=m & "Всего:" & KolComp & VbCrLf
 m=m & "Всего отвечающих на ПИНГ " & KolOk & VbCrLf
 m=m & "Всего не отвечающих на ПИНГ " & KolNo
' Файл запишется в корневую директорию C:\Temp\ListDomenComp.txt - Выбери сам куда
TextOut m,"C:\Temp\ListDomenComp.txt"
'Открываем созданный файл в Блокноте и выводим полученные данные на экран
Set theNotepad = WshShell.Exec("notepad " & "C:\Temp\ListDomenComp.txt" )
'************************** Конец ********************************


Но это массовый подход
Файл прилагаю.
Разархивировать и просто запустить.
В следующем посте - одиночный.
В мире временном, сущность которого - тлен,
Не сдавайся вещам несущественным в плен. © О.Х.

Оффлайн LEND

  • Пользователь
  • **
  • Сообщений: 95
  • Карма: 155
  • Истина как всегда где-то рядом
    • Просмотр профиля
Re: Net Send
« Ответ #11 : 03.12.07, 23:09:58 »
LEO

С помощью этой программы можно перезагрузить, выключить несколько выборочных компьютеров по их именам. Набираем в консоли NetSendComp.vbs Ivanov Petrov
(Вводить через пробел)
Будут выключены или перезагружены компьютеры с именами:
Ivanov,Petrov

Программа не проверяет на присутствия компьютеров в сети. Если их нет в сети или если они есть в ней, но нет к ним доступа я написал обработку ошибок т.е. появится сообщение:

      MsgBox "Внимание! Нет доступа к компьютеру " & VbCrLf &_
              strComputer & VbCrLf &_
             "Возможно не включена служба:" & VbCrLf &_
             "Диспетчер удаленного доступа и др." & VbCrLf &_
             "соответствующие службы",vbSystemModal

Было лень писать проверку. Она есть в первой программе. Если заремачить строчки

                     objInstance.Reboot()   'Перезагрузка компьютеров
                     objInstance.Shutdown() 'Выключение компьютера
т.е. сделать

                    ' objInstance.Reboot()   'Перезагрузка компьютеров
                    ' objInstance.Shutdown() 'Выключение компьютера

получим список всех компьютеров в сети без презагрузки и выключения. Список компьютеров со статусом "есть в сети" или "нет в сети" записывается в фал C:\Temp\ListDomenComp.txt
Из этого файла можно узнать какой компьютер сейчас в сети.

Привожу листинг
 
'*******************************************************************
' File:    NetSendComp.vbs (VBScript)
' Author:  LEND
' Выыключение, перезагрузка компьютеров в сети.
'*******************************************************************
Option Explicit
Dim strComputer
Dim strNameSpace
Dim strClass
Dim objClass
Dim colInstances
Dim objInstance
 
   for Each strComputer In Wscript.Arguments
          strNameSpace="Root\CIMV2"
          strClass="Win32_OperatingSystem"
    On Error Resume Next
          Set objClass=GetObject("WinMgmts:{(ShutDown,RemoteShutdown)}\\" &_
           strComputer & "\" & strNameSpace & ":" & strClass)
    If Err <> 0 Then
      MsgBox "Внимание! Нет доступа к компьютеру " & VbCrLf &_
              strComputer & VbCrLf &_
             "Возможно не включена служба:" & VbCrLf &_
             "Диспетчер удаленного доступа и др." & VbCrLf &_
             "соответствующие службы",vbSystemModal
    else
         Set colInstances=objClass.Instances_   
             for Each objInstance In colInstances
               WScript.Echo "Компьютер " & strComputer & " будет перезагружен."
                objInstance.Reboot()   'Перезагрузка компьютеров
               ' objInstance.Shutdown() 'Выключение компьютера
             next
    end if
Err.clear
On Error GoTo 0
   next
'************************** Конец ********************************

Да, еще
              Reboot
              Shutdown
являются методами класса Win32_OperatingSystem
Там же есть еще методы:
              Win32Shutdown
              SetDateTime

Программа у меня работает
Оба файла - листинга можно править для своего удобства.
С уважением
LEND
В мире временном, сущность которого - тлен,
Не сдавайся вещам несущественным в плен. © О.Х.