Пример оповещения ответственного методом net send
Запустив скрипт proc_new.vbs, проверяем нашу систему и получаем оповещение при обнаружении проблемы хотябы по одному из трех контролируемых параметров.
Скриншот:
Пример vbs файла:
(Скачать файл можно будет
здесь. ЗЫ Не тыкать! Жать правой кнопкой: сохранить ссылку как...)
Основные параметры:
-
ProcName - имя процесса (Альтернатива: наличие процесса можно определить выполнив команду tasklist, просмотреть все параметры можно с ключом /?);
-
strComputer - имя компьютера на котором проводится проверка (по умолчанию ".");
-
strServer - имя сервера, который будем пинговать (Альтернатива: можно пинговать и вручную командой ping)
-
ListenPort - номер порта (проверяем на компьютере, где запускается скрипт);
-
netUsers - список ответственных, которым будет отправлено сообщение в случаее выявления проблем (указать в кавычках через запятую);
-
printall - параметр для отладки (0 - по умолчанию, отпрака только при наличии проблемы, или 1 - позволяет отправлять сообщения даже при отсутствии проблемы).
ЗЫ Теоретически каждый блок скрипта можно использовать и отдельно по своему усмотрению.
Текст на WSH (VBS):
ProcName = "client.exe"
strComputer = "."
strServer="testserver"
ListenPort = "10211"
strFindParam = "Проверка процесса: " & ProcName & "; " & "Порт: " & ListenPort
dim netUsers
netUsers=Array("ivanovii","petrovpp")
printall = 0
On Error Resume Next
serr = 0
Set WshShell = WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
'Проверка порта
WshShell.Run "cmd /c netstat -anop TCP | find "":" & ListenPort & """ | find ""ESTABLISHED"" > %temp%\netstat.txt",0,true
nsfullpath = WshShell.ExpandEnvironmentStrings("%temp%\netstat.txt")
If Err.Number <> 0 Then serr = serr + 100 End If
errnum100=Err.Number
errdesc100=Err.Description
Err.Clear
Set fnetstat = fso.OpenTextFile(nsfullpath, 1, false)
strNetStat=fnetstat.Readline
fnetstat.Close
If Err.Number <> 0 Then
serr = serr + 1000
errnum1000=Err.Number
errdesc1000=Err.Description
Err.Clear
PortInfo= "- Вероятно порт: " & ListenPort & " не доступен!"
Else
'Информирование о состоянии отключено Err.Number=0
Err.Number=0
serr = serr + 1000*Err.Number
errnum1000=Err.Number
errdesc1000="Порт найден"
Err.Clear
PortInfo= "+ Порт: " & ListenPort & " активен!"
End If
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process where Name='" & ProcName & "'")
If colProcessList.count>0 Then
ProcID = "ProcIDs "
For Each objProcess in colProcessList
'Wscript.Echo "Process: " & objProcess.Name & " Process ID: " & objProcess.ProcessID '_
' & " Thread Count: " & objProcess.ThreadCount & " Page File Size: " _
' & objProcess.PageFileUsage & " Page Faults: " & objProcess.PageFaults _
' & " Working Set Size: " & objProcess.WorkingSetSize
ProcID = ProcID & " : " & objProcess.ProcessID
Next
'Информирование о состоянии отключено Err.Number=0
NetSendInfo = "+ Процесс " & ProcName & " существует в количестве: " & colProcessList.count & " шт. " & ProcID
Err.Raise
Err.Number=0
Err.Description="Процес найден."
Else
'Информирование о состоянии
NetSendInfo = "- Процесс " & ProcName & " не существует!" & " Требуется проверка."
Err.Raise
Err.Number=1
Err.Description="Процес не найден"
End If
If Err.Number <> 0 Then serr = serr + 10000 End If
errnum10000=Err.Number
errdesc10000=Err.Description
Err.Clear
'Новый вариант проверки
nameping = TestPing(strServer)
If nameping = 0 Then
Err.Raise
Err.Number=1
Err.Description=nameping
PingInfo = "- Не пингуется или не доступен!"
Else
'Информирование о состоянии отключено Err.Number=0
Err.Raise
Err.Number=0
Err.Description="Пинг прошел"
PingInfo = "+ Все хорошо пингуется!"
End If
If Err.Number <> 0 Then serr = serr + 100000 End If
errnum100000=Err.Number
errdesc100000=Err.Description
Err.Clear
'Wscript.Echo serr
errstr = ""
If errnum100 <> 0 Then
errstr = errstr & "> На начальной стадии: Код " & errnum100 & " " & errdesc100 & VBNewLine
End If
If errnum1000 <> 0 or printall = 1 Then
errstr= errstr & "> При получении параметров netstat: Код " & errnum1000 & " " & errdesc1000 _
& VBNewLine & " " & PortInfo & VBNewLine
End If
If errnum10000 <> 0 or printall = 1 Then
errstr = errstr & "> При определении списка процессов: Код " & errnum10000 & " " & errdesc10000 _
& VBNewLine & " " & NetSendInfo & VBNewLine
End If
If errnum100000 <> 0 or printall = 1 Then
errstr = errstr & "> При проверке пинга: Код " & errnum100000 & " " & errdesc100000 _
& VBNewLine & " " & PingInfo
End If
If serr <> 0 or printall = 1 Then
For Each users in netUsers
WshShell.Run "net send " & users & " Скрипт возвратил следующие данные: " _
& VBNewLine & strFindParam _
& VBNewLine & errstr,0
Next
End If
Function TestPing(address)
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colPings = objWMIService.ExecQuery _
("Select * From Win32_PingStatus where Address = '" & address & "'")
For Each objStatus in colPings
If IsNull(objStatus.StatusCode) or objStatus.StatusCode<>0 Then
TestPing = 0
Else
TestPing = 1
End If
Next
End Function