В данном разделе находится общая информация.
В данном разделе находятся примеры различных Linux shell скриптов.
В данном разделе находятся примеры различных скриптов на WSH.
В данном разделе находятся материалы по разным темам.

Правильный CSS!

Для корректного отображения страницы, рекомендуется использовать браузер поддерживающий JavaScript.

Для навигации пользуйтесь боковым меню и кнопками "Описание" и "Подробно".

Простой WSH (VBS) скрипт проверки активного процесса, порта и ответа сервера.

Основные возможности:

  • Проверка наличия заданного активного процесса;
  • Проверка наличия заданного порта в режиме ESTABLISHED;
  • Проверка прохождения пинга до целевого сервера;
  • Оповещение ответственного (по списку) методом net send.

Пример оповещения ответственного методом 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
            

Rambler's Top100

Yandex.Metrika

Page modification: Птн Сен 10 16:48:35 MSD 2010
Используется Quanta+ 3.5.10 Under the GPL v2 license.