Войти

Показать полную графическую версию : Отправка СМС при простое компьютера более 30 минут и при выходе из простоя


Nird
20-05-2015, 13:26
Добрый день.
Нарисовалась такая задача. Для контроля работы персонала на удаленных торговых точках необходимо реализовать смс оповещение о простое компьютера более 30 минут.
В принципе стандартный планировщик позволяет выполнять задание только если компьютер простаивает более n секунд. Это по большей части подходит. Но как отправить php GET запрос из cmd ума не приложу. Ставить на каждую клиентскую машину вэб сервер, разумеется, смысла нет никакого. Более того, нужно реализовать еще и отправку e-mail при начале простоя более 30 минут и при выходе из простоя.

Некоторые СМС шлюзы позволяют отправлять смс-ки через API по средствам письма. Т.е. в теории можно убить двух зайцев одним письмом. Отсюда вопросы:

1. Как отправлять e-mail сообщения из cmd?[решено (http://forum.oszone.net/post-2509438.html#post2509438)]
2. Как отследить и выполнить отправку сообщения при выходе из простоя?

ну и как альтернатива: как отправить php GET запрос из cmd? [решено (http://forum.oszone.net/post-2509438.html#post2509438)]

Nird
20-05-2015, 13:32
И вот еще какой вопрос.

Если задание выполнится один раз, следовательно в этот день задание выполняться уже не будет, что не правильно вовсе.

Может есть какой софт, вроде ActualSpy. В нем я не нашел регистрацию простоя в логах, да и отправки сообщения при определенных событиях он тоже не умеет.

Iska
20-05-2015, 13:56
Nird, запрос не бывает «php».

1. Как отправлять e-mail сообщения из cmd? »
«sendemail», скриптом на WSH/PowerShell.

Nird
20-05-2015, 14:02
запрос не бывает «php». »
Под php GET запросом я подразумевал именно GET запрос средствами PHP. Поскольку в запросе используется функция похапэ urlencode иначе текст сообщение в GET просто не всунуть.

Iska
20-05-2015, 14:30
иначе текст сообщение в GET просто не всунуть »
Но зачем тут нужен именно php? Есть WSH, PoSH.

Nird
20-05-2015, 15:48
Цитата Iska:
Есть WSH, PoSH. »
Честно признаться я понятия не имел что тот же PS может отправить get.

Отправка GET запроса средствами PS нашел тут (http://stackoverflow.com/questions/13935218/how-to-use-http-get-in-powershell)
$msg = Read-Host -Prompt "Enter message"
$encmsg = [System.Web.HttpUtility]::UrlEncode($msg)
Invoke-WebRequest -Uri "http://smsserver/SNSManager/msgSend.jsp?uid&to=smartsms:*+001XXXXXX&msg=$encmsg&encoding=windows-1255"

На данный момент есть готовая реализация отправки сообщения средствами ps

Распишу тут, может кому пригодится.

1. Качаем powerShell
PowerShell для Win XP sp3 (https://www.microsoft.com/ru-RU/download/details.aspx?id=16818)
PowerShell для Win XP sp2 (https://www.microsoft.com/en-us/download/details.aspx?id=7217)
После установки запускаем Пуск - выполнить - powershell и вводим команду Set-ExecutionPolicy remotesigned #Эта команда разрешает выполнение ненадежных скриптов

2. Берем скрипт отправки письма
Я нашел этот (https://xaegr.wordpress.com/2008/05/22/send-smtpmailps1_v2/)

3. Ну и создаем батник вида
>powershell C:\send-mail.ps1 -server smtp.mail.ru -from mail@mail.ru -to mail@mail.ru -body 'Текст письма' -subject 'Тема'По большому счету этого достаточно. Есть смс шлюзы которые предоставляют возможность отправки смс через email

Остался один вопрос. Это отправка сообщения при выходе из простоя. Как и чем можно это реализовать?

Iska
20-05-2015, 16:10
Остался один вопрос. Это отправка сообщения при выходе из простоя. Как и чем можно это реализовать? »
По сути, вопрос иной — есть ли возможность отследить выход из «простоя». Я так понимаю.

Nird
20-05-2015, 16:18
есть ли возможность отследить выход из «простоя». Я так понимаю. »
По сути, да.

Опиум
20-05-2015, 17:39
вопрос чуть в сторону.
при таком запросе, имя агента $_SERVER['HTTP_USER_AGENT'], которое увидит web сервер -пустое, надо полагать...
можно ли его както задать?

Nird
20-05-2015, 17:44
можно ли его както задать? »
Я конечно еще толком не разбирался но по ссылке есть второй пример, похоже это как раз то что нужно:
$wc = New-Object system.Net.WebClient;
$sms = Read-Host "Enter SMS text";
$sms = [System.Web.HttpUtility]::UrlEncode($sms);
$smsResult = $wc.downloadString("http://smsserver/SNSManager/msgSend.jsp?uid&to=smartsms:*+001XXXXXX&msg=$sms&encoding=windows-1255")

Iska
20-05-2015, 18:37
можно ли его както задать? »
WebClient - класс (System.Net) (https://msdn.microsoft.com/ru-ru/library/system.net.webclient(v=vs.110).aspx) → WebClient.Headers - свойство (System.Net) (https://msdn.microsoft.com/ru-ru/library/system.net.webclient.headers(v=vs.110).aspx).

Пример задания заголовка «user-agent» приведён непосредственно по первой ссылке.

Опиум
21-05-2015, 13:17
Спасибо, на ps получилось, а вот на vbs что-то не катит:
Типа Microsoft VBScript runtime error: Class not defined: 'WebClient'

Iska
21-05-2015, 13:44
а вот на vbs что-то не катит: »
Угу. Это ж не Automation, а .Net (хотя, справедливости ради, отмечу, что некоторые классы .Net, зарегистрированные и как Automation, можно пользовать и в VBScript).

Опиум
22-05-2015, 12:31
Iska, а как это реализовать?

Iska
22-05-2015, 14:29
Например, так: VBScript Scripting Techniques: ArrayLists (http://www.robvanderwoude.com/vbstech_data_arraylist.php) — класс .Net ArrayList Class (System.Collections) (https://msdn.microsoft.com/en-us/library/system.collections.arraylist(v=vs.110).aspx) доступен также как объект Automation «System.Collections.ArrayList». Есть и другие (причём, некоторые потребно будет регистрировать самому).




© OSzone.net 2001-2012