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" )
'************************** Конец ********************************
Но это массовый подход
Файл прилагаю.
Разархивировать и просто запустить.
В следующем посте - одиночный.