Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] [решено] VBS: мониторинг процессов и уведомление на email

Ответить
Настройки темы
VBS/WSH/JS - [решено] [решено] VBS: мониторинг процессов и уведомление на email

Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: novi
Дата: 23-01-2014
Описание: Исправил ошибки
Форумчане, день добрый помогите допилить скрипт. Сам не силен.
Сам скрипт vbs

Назначение скрипта: мониторинг запущенных процессов указанных в коде, при отсутствии запущенного процесса, запускать его, и отправлять email.
читать дальше »

Код: Выделить весь код
Option Explicit
Dim objSWbemServicesEx
Dim intProcessID

Dim strSMTPServer
Dim strSmtpPort
Dim strSmtpAuth
Dim strSmtpSsl
Dim strDate
Dim strSendingEmail
Dim strReportEmail
Dim objMessage

rem Set objSWbemServicesEx = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2:Win32_Process")
rem Set objSWbemServicesEx = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set objSWbemServicesEx = GetObject("winmgmts:{impersonationLevel=impersonate,(debug)}!\\.\root\CIMV2")
If objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'notepad1.exe'").Count = 0 Then
    If objSWbemServicesEx.Get("Win32_Process").Create("c:\programma\01\notepad1.exe", Null, intProcessID) = 0 Then
Call sendMail
    End If      
End If 

Set objSWbemServicesEx = GetObject("winmgmts:{impersonationLevel=impersonate,(debug)}!\\.\root\CIMV2")
If objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'notepad2.exe'").Count = 0 Then
    If objSWbemServicesEx.Get("Win32_Process").Create("c:\programma\02\notepad2.exe", Null, intProcessID) = 0 Then
Call sendMail
    End If      
End If 

Set objSWbemServicesEx = GetObject("winmgmts:{impersonationLevel=impersonate,(debug)}!\\.\root\CIMV2")
If objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'notepad3.exe'").Count = 0 Then
    If objSWbemServicesEx.Get("Win32_Process").Create("c:\programma\03\notepad3.exe", Null, intProcessID) = 0 Then
Call sendMail
    End If      
End If 

Function sendMail()
strSmtpServer="mx server" ' имя почтового сервера
strSmtpPort=25
strSmtpAuth="no"
strSmtpSsl="no"
strDate=date
strSendingEmail="mail" ' Имя отправителя
strReportEmail="mail" ' Имя получателя
'WScript.Echo logPath & "/backup" & strDate & ".html"
Set objMessage = CreateObject("CDO.Message")
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strSmtpServer
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = strSmtpPort
If strSmtpAuth = "yes" Then
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 2 'use '2' for NTLM authentication
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = strSmtpUser
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = strSmtpPass
End If
If strSmtpSsl = "yes" Then
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
End If
objMessage.Configuration.Fields.Update
objMessage.Subject = "Notepad " & strDate & "."
objMessage.From = strSendingEmail
objMessage.To = strReportEmail
rem objMessage.HtmlBody = "Рестарт Notepad"
objMessage.TextBody = "Restart Notepad"
objMessage.Send
End Function

Программа notepad взята как тест. На самом деле будет не три программы, а около 30. Поэтому в примере, чтобы код был не большой указал всего 3. Какая длина при 30 программ думаю представляете. Возможно как-то это можно упростить, но я увы не знаю

Очень хочется добавить в функционал скрипта
1. В полях отправки email чтобы objMessage.Subject и objMessage.TextBody писались имена тех процессов которые были перезапущены. Например если закрылась программа notepad2, скрипт её запустил и отправил email где в полях Тема и тело письма писалось что это notepad2.exe
2. Не уверен что правильная структура кода проверки и запуска процесса, она хоть и работает, но не на 100%. Бывает такое что приложения которые скрипт запускает до конца не запускаются smile. Например мои приложения когда полностью запущены весят в памяти 50МБ, так вот, когда скрипт запускает приложение, оно загружается до 20МБ и вылетает. А если в тотже момент самому тыкнуть на ярлык приложение, оно 100% запустится. Я не могу понять из-за чего это, но и не всегда это происходит. Есть предположения только, не хватает дескрипторов ресурсов. Также прочитал про интерактивный и не интерактивный режим запуска, возможно из-за этого приложение полностью не может загрузится. Т.е. скрипт неправильно написан для режима запуска.
3. Для чего строка в скрипте ? 'WScript.Echo logPath & "/backup" & strDate & ".html"
Спасибо, что дочитали до сюда

Отправлено: 23:25, 17-11-2013

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
Option Explicit

Const cdoSendUsingPort = 2
Const cdoBasic = 1

Const strSchema = "http://schemas.microsoft.com/cdo/configuration/"


Dim arrProcesses

Dim strComputer

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim collSWbemObjectSet
Dim objSWbemObjectEx

Dim elem
Dim objFSO

Dim lngProcessID


arrProcesses = Array("C:\WINDOWS\system32\notepad.exe", "C:\WINDOWS\system32\calc.exe", "C:\WINDOWS\system32\mspaint.exe")

strComputer = "."

Set objSWbemLocator    = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
Set collSWbemObjectSet = objSWbemServicesEx.ExecNotificationQuery("SELECT * From __InstanceDeletionEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process'")

Set objFSO             = WScript.CreateObject("Scripting.FileSystemObject")

Do
	Set objSWbemObjectEx = collSWbemObjectSet.NextEvent.TargetInstance
	
	For Each elem In arrProcesses
		If objSWbemObjectEx.Name = objFSO.GetFileName(elem) Then
			With WScript.CreateObject("CDO.Message")
				.From     = "account@mail.ru"
				.To       = "account@yandex.ru"
				.Subject  = "Process [" & objFSO.GetFileName(elem) & "] closed."
				
				If objSWbemServicesEx.Get("Win32_Process").Create(elem, objFSO.GetParentFolderName(elem), Nothing, lngProcessID) = 0 Then
					.Textbody = Now() & vbTab & "Process [" & elem & "] successfully started."
				Else
					.Textbody = Now() & vbTab & "Can't create process [" & elem & "]."
				End If
				
				With .Configuration.Fields
					.Item(strSchema & "smtpserver")       = "smtp.mail.ru"
					.Item(strSchema & "sendusing")        = cdoSendUsingPort
					.Item(strSchema & "smtpserverport")   = 25
					.Item(strSchema & "smtpauthenticate") = cdoBasic
					.Item(strSchema & "sendusername")     = "account@mail.ru"
					.Item(strSchema & "sendpassword")     = "password"
					
					.Update
				End With
				
				.Send
			End With
			
			Exit For
		End If
	Next
Loop

Set objFSO             = Nothing
Set collSWbemObjectSet = Nothing
Set objSWbemServicesEx = Nothing
Set objSWbemLocator    = Nothing

WScript.Quit 0

Отправлено: 01:20, 20-11-2013 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska, спасибо большое за пример, но немного не то.

Отправлено: 22:52, 28-11-2013 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


novi, поясните, что именно Вас не устраивает, либо — что я понял из Вашего техзадания неверно.

Отправлено: 00:46, 29-11-2013 | #4


Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: png error_mail.png
(9.3 Kb, 8 просмотров)

Iska,
При загрузке ОС, выполняется автовход, скрипт (в автозагрузке) другой, не тот что указал в шапке темы, запускает мои определённые программы, штук 20.
Далее, уже скрипт который в шапке, добавлен в "планировщик заданий", который запускает мой скрипт каждые 10 минут, и проверяет наличие запущенных процессов. Если процесс закрылся, то скрипт его запускает. Скрипт сам в памяти висит только до тех пор, пока все не проверит, потом закрывается.
Также в моём скрипте важная строчка:
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 2 'use '2' for NTLM
или
strSmtpAuth="no"
, тобы не логиниться.

Проверив Ваш скрипт, получается следующее.
Скрипт постоянно висит в памяти. Даже если программы не запущена, он их не запускает, а просто висит. Попытка запустить вручную программу и потом её в ручную закрыть получаю ошибку. После появлении ошибки скрипт выгружается.
Может конечно из-за того что я неправильно скорректировал ваш скрипт под себя, а именно smtp в скрипте.
Подскажите что изменить, чтобы без авторизации отправлялись письма?

Последний раз редактировалось novi, 29-11-2013 в 22:03. Причина: Исправил ошибки в тексте.


Отправлено: 21:53, 29-11-2013 | #5


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


novi, ясненько. Давайте уточним: приложения, которые запускает скрипт в автозагрузке, и приложения, за процессами которых должен следить и вновь запускать второй скрипт — одни и те же?

Цитата novi:
Проверив Ваш скрипт, получается следующее.
Скрипт постоянно висит в памяти. »
Совершенно верно. Поскольку он подписывается на уведомления о событиях Wbem. После чего просто «ждёт» события завершения любого процесса, проверяя их (событий) поступление раз в секунду.

Цитата novi:
Даже если программы не запущена, он их не запускает, а просто висит. »
В техзадании этого не было. Теперь (если ответ на вопрос в начале поста утвердительный) — будет. Делаем?

Цитата novi:
Попытка запустить вручную программу и потом её в ручную закрыть получаю ошибку. После появлении ошибки скрипт выгружается.
Может конечно из-за того что я неправильно скорректировал ваш скрипт под себя, а именно smtp в скрипте. »
Всё возможно. Я ведь Вашего кода не вижу. Во всяком случае, коль до попытки создания сообщения доходит — значит, завершение процесса отслеживает.

Цитата novi:
Подскажите что изменить, чтобы без авторизации отправлялись письма? »
Без авторизации? Нет ничего проще:
Код: Выделить весь код
With WScript.CreateObject("CDO.Message")
	.From     = "monitor1@fabrikam.com"
	.To       = "admin1@fabrikam.com"
	.Subject  = "Atl-dc-01 down"
	.Textbody = "Atl-dc-01 is no longer accessible over the network."
	
	.Send
End With
Но разве такие сервера остались?

Отправлено: 01:43, 30-11-2013 | #6


Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
Давайте уточним: приложения, которые запускает скрипт в автозагрузке, и приложения, за процессами которых должен следить и вновь запускать второй скрипт — одни и те же? »
Да, одни и те же, т.к. эти приложения могут самостоятельно выгрузится.

Цитата Iska:
В техзадании этого не было. Теперь (если ответ на вопрос в начале поста утвердительный) — будет. Делаем? »
Обязательно.

Цитата Iska:
Но разве такие сервера остались? »
Есть причини по которым нужно именно так.

В принципе скрипт сверху, этим всем и занимался. Тока не всё умел делать С вашей точки зрения он криво написан?

Отправлено: 10:36, 30-11-2013 | #7


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Пробуйте:
читать дальше »
Код: Выделить весь код
Option Explicit

Dim arrProcesses

Dim strComputer

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim collSWbemObjectSet
Dim objSWbemObjectEx

Dim elem
Dim objFSO

Dim lngProcessID


arrProcesses = Array("C:\WINDOWS\system32\notepad.exe", "C:\WINDOWS\system32\calc.exe", "C:\WINDOWS\system32\mspaint.exe")

strComputer = "."

Set objSWbemLocator    = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
Set collSWbemObjectSet = objSWbemServicesEx.ExecNotificationQuery("SELECT * From __InstanceDeletionEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process'")

Set objFSO             = WScript.CreateObject("Scripting.FileSystemObject")

' Первоначальный запуск процессов
For Each elem In arrProcesses
	If objSWbemServicesEx.Get("Win32_Process").Create(elem, objFSO.GetParentFolderName(elem), Nothing, lngProcessID) = 0 Then
		'WScript.Echo Now() & vbTab & "Process [" & elem & "] successfully started."
	Else
		WScript.Echo Now() & vbTab & "Can't create process [" & elem & "]."
	End If
Next

' Слежение за теми же процессами
Do
	Set objSWbemObjectEx = collSWbemObjectSet.NextEvent.TargetInstance
	
	For Each elem In arrProcesses
		If objSWbemObjectEx.Name = objFSO.GetFileName(elem) Then
			With WScript.CreateObject("CDO.Message")
				.From     = "monitor1@fabrikam.com"
				.To       = "admin1@fabrikam.com"
				.Subject  = "Atl-dc-01 down"
				
				If objSWbemServicesEx.Get("Win32_Process").Create(elem, objFSO.GetParentFolderName(elem), Nothing, lngProcessID) = 0 Then
					.Textbody = Now() & vbTab & "Process [" & elem & "] successfully started."
				Else
					.Textbody = Now() & vbTab & "Can't create process [" & elem & "]."
				End If
				
				.Send
			End With
			
			Exit For
		End If
	Next
Loop

Set objFSO             = Nothing
Set collSWbemObjectSet = Nothing
Set objSWbemServicesEx = Nothing
Set objSWbemLocator    = Nothing

WScript.Quit 0

Как и просили, отсылка без авторизации. Если запуск каких-то приложений отличается от обычного (минимизация/скрытие окна, приоритет отличен от Normal, рабочий каталог отличен от каталога приложения и т.п.) — говорите, будем усложнять логику.

Цитата novi:
т.к. эти приложения могут самостоятельно выгрузится. »
Например?

Цитата novi:
Есть причини по которым нужно именно так. »
Поделитесь ими.

Цитата novi:
В принципе скрипт сверху, этим всем и занимался. Тока не всё умел делать С вашей точки зрения он криво написан? »
Не знаю — не смотрел .

Отправлено: 07:03, 01-12-2013 | #8


Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: png error_mail.png
(8.2 Kb, 6 просмотров)

Цитата Iska:
Пробуйте: »
Хм... интересно получается.
1 вариант проверил: не запуская программ, запустил скрипт. Скрипт указанные программы запустил, в диспетчере задач они видны, а в нижней панели "панель задач", их нету , т.е. они я так понимаю запущены в фоне.
Идём далее, с помощью диспетчера задач, выгружаем принудительно одну из программ запущенных скриптом, и вылетает ошибка. Выложил скрин.

2 вариант проверил: с начало запустил все свои программы указанные в скрипте, они нормально отображаются в диспетчере задач. Запускаю скрипт, он ещё раз их запускает, и те которые запустил именно скрипт их не видно. А в диспетчере задач их стало в два раза больше. Т.е. в диспетчере задач следующая картина: по два процесса каждой программы.

Оба варианта не оч гуд. Я наверно это не сказал. Запуск программ происходит как в обычном режиме (т.е. если бы мы сами ткнули мышкой на ярлык программы), т.е. запустил программу, и она отобразилась в панеле задач.

Цитата Iska:
Как и просили, отсылка без авторизации. »
Спасибо, это очень нужно.

Цитата Iska:
Например? »
В шапке писал, продублирую.
Бывает такое, что приложения которые скрипт запускает, до конца не запускаются smile. (Это происходит например: запущено 30 программ, по истечении например 2-3-4 недель, эти программы в памяти уже занимаю не 50 мб, а от 70 до 100МБ, после этого скрипт не всегда может запустить эту программу.) Например мои приложения когда полностью запущены занимают в памяти 50МБ, проходит время, эти приложения могут съесть ОЗУ до 100 МБ, (ОЗУ на хосте хватает, не внём дело 100%) так вот, когда скрипт запускает приложение, оно загружается до 20МБ и вылетает. А если в тот же момент самому ткнуть на ярлык приложения, оно 100% запустится. Я не могу понять из-за чего это, но и не всегда это происходит. Есть предположения только, не хватает дескрипторов ресурсов ОС Windows. Также прочитал про интерактивный и не интерактивный режим запуска, возможно из-за этого приложение полностью не может загрузится. Т.е. мой скрипт неправильно написан для режима запуска. В общем загадка

Цитата Iska:
Поделитесь ими. »
Разрешено только для внутренней сети. К хосту имеют доступ несколько человек, не хотелось бы светить логин и пасс почты для авторизации.

Цитата Iska:
Не знаю — не смотрел . »
OK, ваш код выглядит и вправду скромнее

Цитата Iska:
Если запуск каких-то приложений отличается от обычного (минимизация/скрытие окна, приоритет отличен от Normal, рабочий каталог отличен от каталога приложения и т.п.) — говорите, будем усложнять логику. »
Путь запуска приложений следующий:
c:\Programma\Notepad01\notepad01.exe
c:\Programma\Notepad02\notepad02.exe
c:\Programma\Notepad03\notepad03.exe
c:\Programma\Notepad04\notepad04.exe
c:\Programma\Notepad05\notepad05.exe
и т.д.

Вы правы, в идеале хотелось бы получить именно минимизацию. Приоритет пусть будет стандартный, как если бы мы запустили приложение вручную, тыкнув по ярлыку.
И также Вы верно подметили, есть часть (не все) приложений, которые умеют скрываться в трей .

Последний раз редактировалось novi, 01-12-2013 в 11:59.


Отправлено: 11:47, 01-12-2013 | #9


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата novi:
а в нижней панели "панель задач", их нету »
Ух ты! Это как так получилось?

Давайте уточним, выложенный мною скрипт (с Вашими путями, разумеется) Вы запускали обычным двойным щелчком из Проводника? Или как-то иначе, например, из-под Диспетчера задач?

Цитата novi:
т.е. они я так понимаю запущены в фоне. »
Да нет, самый обычный запуск.

Цитата novi:
Выложил скрин. »
Не вижу .

Цитата novi:
2 вариант проверил: с начало запустил все свои программы указанные в скрипте, они нормально отображаются в диспетчере задач. Запускаю скрипт, он ещё раз их запускает, и те которые запустил именно скрипт их не видно. А в диспетчере задач их стало в два раза больше. Т.е. в диспетчере задач следующая картина: по два процесса каждой программы. »
Всё верно.

Цитата novi:
Разрешено только для внутренней сети. К хосту имеют доступ несколько человек, »
Ясно.

Цитата novi:
в идеале хотелось бы получить именно минимизацию. »
Пробуйте:
читать дальше »
Код: Выделить весь код
Option Explicit

Const SW_SHOWMINIMIZED   = 2
Const SW_SHOWMINNOACTIVE = 7


Dim arrProcesses

Dim strComputer

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim collSWbemObjectSet
Dim objSWbemObjectEx

Dim elem
Dim objFSO

Dim lngProcessID


arrProcesses = Array("C:\WINDOWS\system32\notepad.exe", "C:\WINDOWS\system32\calc.exe", "C:\WINDOWS\system32\mspaint.exe")

strComputer = "."

Set objSWbemLocator    = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
Set collSWbemObjectSet = objSWbemServicesEx.ExecNotificationQuery("SELECT * From __InstanceDeletionEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process'")
Set objSWbemObjectEx   = objSWbemServicesEx.Get("Win32_ProcessStartup").SpawnInstance_

objSWbemObjectEx.ShowWindow = SW_SHOWMINNOACTIVE

Set objFSO             = WScript.CreateObject("Scripting.FileSystemObject")

' Первоначальный запуск процессов
For Each elem In arrProcesses
	If objSWbemServicesEx.Get("Win32_Process").Create(elem, objFSO.GetParentFolderName(elem), objSWbemObjectEx, lngProcessID) = 0 Then
		'WScript.Echo Now() & vbTab & "Process [" & elem & "] successfully started."
	Else
		WScript.Echo Now() & vbTab & "Can't create process [" & elem & "]."
	End If
Next

' Слежение за теми же процессами
Do
	'Set objSWbemObjectEx = collSWbemObjectSet.NextEvent.TargetInstance
	With collSWbemObjectSet.NextEvent.TargetInstance
		For Each elem In arrProcesses
			If .Name = objFSO.GetFileName(elem) Then
				With WScript.CreateObject("CDO.Message")
					.From     = "monitor1@fabrikam.com"
					.To       = "admin1@fabrikam.com"
					.Subject  = "Atl-dc-01 down"
					
					If objSWbemServicesEx.Get("Win32_Process").Create(elem, objFSO.GetParentFolderName(elem), objSWbemObjectEx, lngProcessID) = 0 Then
						.Textbody = Now() & vbTab & "Process [" & elem & "] successfully started."
					Else
						.Textbody = Now() & vbTab & "Can't create process [" & elem & "]."
					End If
					
					.Send
				End With
				
				Exit For
			End If
		Next
	End With
Loop

Set objFSO             = Nothing

Set objSWbemObjectEx   = Nothing
Set collSWbemObjectSet = Nothing
Set objSWbemServicesEx = Nothing
Set objSWbemLocator    = Nothing

WScript.Quit 0

Отправлено: 13:13, 01-12-2013 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] [решено] VBS: мониторинг процессов и уведомление на email

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Отправка скриншота на email andrew_gurylyov@vk Скриптовые языки администрирования Windows 22 23-02-2012 11:52
VBS/WSH/JS - Помогите редактировать Autorun_Disable.vbs на Autorun_Enable.vbs nod201 Скриптовые языки администрирования Windows 0 05-12-2009 05:44
выключение servera на email kurt17 Microsoft Windows NT/2000/2003 4 22-07-2009 07:27
Уведомление на e-mail GSVG О сайте и форуме 4 17-03-2007 09:37
Уведомление о e- mail на телефон Sherla Мобильные ОС, смартфоны и планшеты 5 28-07-2003 22:31




 
Переход