Что нового

[Сеть, интернет] Отправка сообщения терминальному пользователю

panda_911

Только вверх, только вперед!
Сообщения
52
Репутация
8
Добрый день!
Возникла необходимость сделать небольшую програмку, уведомляющую о неком проишествии.
И все бы хорошо, но появился один ньюанс с которым пока не могу совладать.

Вот задача:
Програмка будет запущена на сервере в одном экземпляре.
При срабатывании на заданое условие, она должна отправить уведомление нескольким пользователям подключенным по RDP к серверу.
Список пользователей должен браться из ини файлика. (чтоб удобнее было делать список рассылки)

Так как своего аналога Net Send у AutoIt нету, думал сделать это тем же "нетсендом".
Но на сервере отключена служба сообщений и включить ее увы не позволяется. Потому нетсенд отпал :(
Вот пока и ломаю голову как реализовать подобную рассылку уведомлений.


Пока в голову пришла только одна мысль.
Сделать нужным пользователям что то вроде небольшого клиента который бы висел в трее и мониторил бы работу основной программы. Которая в свою очередь при срабатывании посылала некий "сигнал" клиентам и те выдавали банальный MsgBox с информацией.
Может конечно это решение и довольно грубое хотя думаю работать будет.
Но хотелось бы это реализовать так как задумывалось изначально

Буду очень признателен за любые подсказки!
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
На сервере Win 2003.
Пуск - Диспетчер служб терминалов
Справка - Управление пользователями, сеансами и процессами
См. также
Msg - Справочник по командной строке - кнопка "Показать"
 
Автор
P

panda_911

Только вверх, только вперед!
Сообщения
52
Репутация
8
Апну тему.
Вопрос все еще актуальный.
Есть ли возможность отправки уведомлений (по типу MsgBox)
Пользователям подключенным по RDP?

*Тоесть скрипт работает под одним юзером. А уведомление появляеться у другого.
 

axlwor

Скриптер
Сообщения
657
Репутация
147
Тут все очень ясно написано. Может все-таки попробуешь?
 
Автор
P

panda_911

Только вверх, только вперед!
Сообщения
52
Репутация
8
Прошу прощения, ступил :wacko:
Почему то ассоциирую "Net Send" с "Msg"
Вопрос снимаю
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Из справки:
MsgОтправка сообщения пользователю.

Синтаксис
msg {имя_пользователя|имя_сеанса|код_сеанса|@имя_файла|*} [/server:имя_сервера] [/time:секунды] [/v] [/w] [сообщение]

Параметры
имя_пользователя
Задает имя пользователя, получающего сообщение.
имя_сеанса
Задает имя сеанса, получающего сообщение.
код_сеанса
Идентифицирует сеанс, пользователь которого получит сообщение.
@имя_файла
Идентифицирует файл, содержащий список имен пользователей, имен сеансов, коды сеансов, которые получат сообщение.
*
Отправляет сообщение всем пользователям в системе.
/server:имя_сервера
Задает сервер терминалов, сеансы или пользователи которого получат сообщение. Если сервер не указан, параметр /server использует текущий сервер.
/time:секунды
Задает время, в течение которого отправленное сообщение будет отображаться на экране пользователя. При завершении этого времени, сообщение пропадает с экрана. Если ограничение времени не задано, то сообщение будет находиться на экране пользователя до тех пор, пока он не нажмет кнопку OK.
/v
Отображает сведения о выполненных действиях.
/w
Устанавливает режим ожидания ответа от пользователя, получившего сообщение. Этот параметр рекомендуется использовать совместно с параметром /time:секунды, чтобы избежать длительной паузы в случае, если пользователь не может ответить немедленно. Можно также использовать этот параметр совместно с параметром /v.
Сообщение
Вводится текст отправляемого сообщения. Если текст сообщения не введен, то система либо попросит сделать это, либо будет использовано стандартное сообщение (а именно STDIN). Чтобы отправить сообщение, содержащее файл, введите символ (>) вслед за именем файла.
/?
Отображает справку в командной строке.
Примечания
Если не задано имя пользователя или сеанса, то команда msg выводит на экран сообщение об ошибке. Если задано имя сеанса, то он должен быть активным.
Для отправки сообщения пользователь должен иметь специальное разрешение.
Примеры
Чтобы отправить сообщение с заголовком «Встречаемся сегодня в 13-00» всем сеансам для пользователя MIKES, введите:

msg MIKES Встречаемся сегодня в 13-00

Чтобы отправить тоже самое сообщение сеансу MODEM02, введите:

msg modem02 Встречаемся сегодня в 13-00

Чтобы отправить сообщение сеансу с кодом 12, введите:

msg 12 Встречаемся сегодня в 13-00

Чтобы отправить сообщение всем сеансам, содержащимся в файле USERLIST, введите:

msg @userlist Встречаемся сегодня в 13-00

Чтобы отправить сообщение всем вошедшим пользователям, введите:

msg * Встречаемся сегодня в 13-00

Чтобы отправить сообщение всем пользователям, установив режим ожидания ответа (например 10 секунд), введите:

msg */TIME:10 Встречаемся сегодня в 13-00
Пример:
Код:
Run("msg service Встречаемся сегодня в 13-00", "", @SW_HIDE)

service - учетка пользователя
 
Автор
P

panda_911

Только вверх, только вперед!
Сообщения
52
Репутация
8
2Yuriy Спасибо, уже разобрался!
все оказалось очень просто :smile:
 

La2Angel

Новичок
Сообщения
156
Репутация
1
Код:
Run("msg service Встречаемся сегодня в 13-00", "", @SW_HIDE)

На Windows 7 x64 пишет msg не является внутренней или внешней командой.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
У меня так работает. Проверил на Windows 7 и Windows XP.
Код:
Run(@ComSpec&" /c msg * Встречаемся сегодня в 13-00", "", @SW_HIDE)

msg.I_001.jpg
 

La2Angel

Новичок
Сообщения
156
Репутация
1
Странно, так работает, но если просто вызвать msg, то Windows упирается и упорно говорит, что нету такого файла, да и кстати, если сделать так FileExists('C:\Windows\System32\msg.exe') файл там находится точно, то данная команда возвращает отсутствие файла.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
La2Angel сказал(а):
Странно, так работает, но если просто вызвать msg, то Windows упирается и упорно говорит, что нету такого файла, да и кстати, если сделать так FileExists('C:\Windows\System32\msg.exe') файл там находится точно, то данная команда возвращает отсутствие файла.
А Windows случайно не x64 разрядная? Если да, то там пути для x64 и x86 различаются, а система их автоматически может исправлять...
 

La2Angel

Новичок
Сообщения
156
Репутация
1
Да меня всегда пугала Windows ) Но факт в том, что заходишь по адресу, который указываешь, там есть файл и скопировать его можно, а вот тот же самый адрес укажешь, уже не видит. Просто с изменениями путей я знаю прикол, но когда меняет путь, доступ к файлу все равно остается и скрипт нормально отрабатывает. А тут упирается :smile:


Добавлено:
Сообщение автоматически объединено:

alex33 сказал(а):
La2Angel сказал(а):
Странно, так работает, но если просто вызвать msg, то Windows упирается и упорно говорит, что нету такого файла, да и кстати, если сделать так FileExists('C:\Windows\System32\msg.exe') файл там находится точно, то данная команда возвращает отсутствие файла.
А Windows случайно не x64 разрядная? Если да, то там пути для x64 и x86 различаются, а система их автоматически может исправлять...

Блин, чет я туплю, делаю так:
Код:
Run(@ComSpec&" /c msg "&$UserName&" "&$msgtxt&"", "", @SW_HIDE)

Но он упорно мне пишет, msg не является внешней или внутренней программой.

Ваш пример сработал только тогда, когда я скопировал в папку со скриптом msg.exe )
 

ildar

Осваивающий
Сообщения
252
Репутация
30
Можно полны путь указать
Код:
C:\Windows\System32\msg.exe
 

La2Angel

Новичок
Сообщения
156
Репутация
1
ildar сказал(а):
Можно полны путь указать
Код:
C:\Windows\System32\msg.exe

Об этом мы и разговариваем, пробовал, указывал и файл там же лежит, но скрипт не реагирует. Разрешение админа тоже есть. Вообщем как бы через проводник заходишь, файл есть там и запустить его можно, но когда то же самое указываешь скрипту, он игнорирует этот файл и говорит, что его там нет.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
La2Angel, это называется редирект. Если вы запускаете скрипт как x86, то путь будет выглядеть так:

Код:
C:\Windows\SysWOW64\msg.exe

А файл msg.exe в папке SysWOW64 отсутствует. Вы либо отключите на время вызова msg.exe редирект (примеров на форуме полно), либо запускайте скрипт как x64, либо скопируйте msg.exe, например, в папку Windows.
 

Vinosh

Сервер не ###. Стоял и стоять будет.
Сообщения
15
Репутация
1
Код:
$command = "msg * hi"

If @OSArch = "X64" Then
	Local $stOldVal = DllStructCreate("dword")
	DllCall("kernel32.dll", "int", "Wow64DisableWow64FsRedirection", "ptr", DllStructGetPtr($stOldVal))
	Run(@ComSpec & " /c " & $command, "", @SW_SHOW)
	DllCall("kernel32.dll", "int", "Wow64RevertWow64FsRedirection", "ptr", DllStructGetPtr($stOldVal))
Else
	Run(@ComSpec & " /c " & $command, "", @SW_SHOW)
EndIf
 
Верх