Все сообщения windows message

Все сообщения windows message

Добрый день! Уважаемые читатели и гости IT блога Pyatilistnik.org. В прошлый раз мы с вами научились устанавливать библиотеку VCRUNTIME140.dll в операционных системах Windows. Сегодня я переключу наше внимание с клиентских ОС на серверные. Наверняка многие из обычных людей , а тем более системные администраторы знают, что такое терминальные службы, RDS ферма или удаленный стол (Удаленка). Это уже неотъемлемая часть бизнес процессов, для многих организаций. Бывают ситуации, что вам необходимо оповестить всех пользователей терминального сервера, о необходимости в его обслуживании. По мимо корпоративной почты вы можете, это делать и средствами Windows и сегодня я покажу, как отправить сообщение всем пользователям RDS фермы.

Постановка задачи

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

Методы отправки сообщения на RDS ферме

  • Отправка сообщение, через диспетчер задач
  • Отправка сообщения через утилиту командной строки msg
  • Отправка сообщения через командлеты PowerShell

Как отправить предупреждение пользователям RDS через диспетчер задач

Во времена терминальных служб на Windows Server 2008 R2, была замечательная возможность массовой отправки сообщений для всех пользователей фермы и делалось, это штатно из диспетчера задач. В 2008R2, когда вы запустите диспетчер задач и перейдете на вкладку «Пользователи», то у вас была возможность выделить их всех, щелкнуть правой кнопкой мыши и из контекстного меню выбрать пункт «Отправить сообщение».

У вас откроется окно «Отправка сообщений», где вы можете задать заголовок сообщения и его текст. После чего нажмите кнопку «Ок».

В результате все пользователи данного удаленного стола, получат вот такое сообщение в виде всплывающего окна.

Точно так же в Windows Server 2008 R2 вы могли произвести отправку оповещений, через оснастку «Диспетчер служб удаленных рабочих столов»

К сожалению начиная с Windows Server 2012 R2, данную возможность для массовой рассылки из диспетчера задач убрали, вы теперь не можете выделить всех пользователей.

Использование утилиты MSG

Есть такая замечательная утилита командной строки msg. Что хорошо, вы ей можете пользоваться на любом компьютере, хоть на Windows 8.1. Откройте cmd, желательно от имени администратора и просто введите:

У вас появится справка по утилите. Конструкция команды будет такой MSG < | | | @ | *>[/SERVER: ] [/TIME: ] [/V] [/W] [ ]

  • Имя пользователя.
  • Имя сеанса. Удобно если нужно отправить конкретному сеансу.
  • Идентификатор сеанса.
  • @ Файл, содержащий список имен пользователей, сеансов или идентификаторов сеансов, которым отправляется сообщение.
  • * Отправить сообщение всем сеансам на указанном сервере.
  • /SERVER: Сервер (по умолчанию — текущий).
  • /TIME: Интервал ожидания подтверждения от получателя.
  • /V Отображение информации о выполненных действиях.
  • /W Ожидание ответа от пользователя, полезно вместе с /V.
  • Отправляемое сообщение. Если не указано, выдается запрос или принимается ввод из STDIN.
Читайте также:  Чем разбить файл mac os

Если нужно отправить сообщение всем людям локально с того же сервера, где они работают, то просто введите:

Вот так, например в Windows Server 2019 выглядит подобное оповещение на RDS ферме.

Для отправки оповещения на удаленный сервер вы должны использовать вот такую конструкцию:

Для отправки на несколько серверов, можно использовать вот такое построение команды:

Использование связки PowerShell и msg

Если у вас выскакивает ошибка «Ошибка 1726 при получении имен сеанса» и сообщение не отправляется, то тут вся загвоздка в том, что у той учетной записи от имени которой открыта командная строка, просто не хватает прав. Вам нужно открыть cmd от имени пользователя у кого есть права на тот сервер.

Третий метод отправки сообщения пользователям RDS через Send-RDUser Message

Безусловно самым популярным и универсальным методом отправки оповещений пользователям удаленного рабочего стола, являются командлеты PowerShell. Одним из таких командлетов выступает Send-RDUser Message.

  • HostServer — Имя RDS сервера
  • -UnifiedSessionID — идентификатор сеанса, к сожалению сразу нельзя выбрать всех, обязательно указывать число (Как определить номер сеанса пользователя, читайте по ссылке)
  • -MessageTitle — Текст самого сообщения

Еще есть возможность воспользоваться скриптом гуляющем по интернету:

$Sessions = Get-TerminalSession -ComputerName «Имя сервера»
ForEach ($Session in $Sessions) <
Send-RDUserMessage -HostServer $Session.ServerName -UnifiedSessionID $Session.UnifiedSessionID -MessageTitle $MessageTitle -MessageBody $MessageText
>

$ConnectionBroker = «»
$SessionHostCollection = «Терминал»

$MessageTitle = «От кого)) »
$MessageText = «Текст «

If ($ConnectionBroker -eq «») <
$HAFarm = Get-RDConnectionBrokerHighAvailability
$ConnectionBroker = $HAFarm.ActiveManagementServer
>

$Sessions = Get-RDUserSession -ConnectionBroker $ConnectionBroker -CollectionName $SessionHostCollection
ForEach ($Session in $Sessions) <
Send-RDUserMessage -HostServer $Session.ServerName -UnifiedSessionID $Session.UnifiedSessionID -MessageTitle $MessageTitle -MessageBody $MessageText
>

Кстати если вы неправильно развернули RDS ферму, то при выполнении скрипта получите сообщение

Команда MSG – отправить сообщение пользователю.

Команда MSG существовала еще в Windows 2000/XP и предназначалась для обмена сообщениями между пользователями вошедшими в систему локально и пользователями терминальных сессий ( подключившихся к удаленному рабочему столу ) . В Windows Vista и более поздних операционных системах семейства Windows команда MSG стала основным стандартным средством обмена сообщениями, поскольку команда net send в данных ОС больше не поддерживается.

Формат командной строки:

Описание параметров командной строки :

пользователь — Имя пользователя.
имя сеанса — Имя сеанса.
ID сеанса — Идентификатор сеанса.
@имя файла — Файл, содержащий список имен пользователей, сеансов или идентификаторов сеансов, которым отправляется сообщение.
* — Отправить сообщение всем сеансам на указанном сервере.
/SERVER:сервер — Сервер (по умолчанию — текущий).
/TIME:секунд — Интервал ожидания подтверждения от получателя.
/V — Отображение информации о выполненных действиях.
/W — Ожидание ответа от пользователя, полезно вместе с /V.
сообщение — Отправляемое сообщение. Если не указано, выдается запрос или принимается ввод из STDIN.

Нынешняя реализация msg.exe прекрасно подходит для обмена сообщениями между сеансами локальных и терминальных пользователей в пределах одной системы, однако, в случаях обмена между разными компьютерами локальной сети, потребуется изменить некоторые настройки безопасности, принятые по умолчанию в операционных системах Windows Vista, 7 и более поздних.

Читайте также:  Не скачивается обновление windows 10 2004

При стандартных настройках, отправка сообщения пользователям удаленных компьютеров не выполняется и сопровождается сообщением:

Ошибка 1722 при получении имен сеанса

Это означает, что на компьютере, где должно приниматься посылаемое сообщение, невозможно получить информацию о вошедших в систему пользователях. Причиной может быть то, что брандмауэр блокирует входящие соединения, недостаточны права пользователя по отношению к удаленной системе, запрет удаленного вызова процедур в параметрах службы сервера терминалов. Как минимум, для обмена сообщениями с использованием команды msg между компьютерами, необходимо иметь учетную запись пользователя, действительную по отношению к удаленной системе и выполнить следующие настройки:

на каждом компьютере, которому будут отправляться сообщения, добавить в раздел реестра HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server параметр AllowRemoteRPC типа REG_DWORD и равный 1 Для изменения настроек можно использовать .reg-файл следующего содержания:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server]
«AllowRemoteRPC»=dword:00000001

В ОС Windows Vista, Windows 7, 8, 10 ключ реестра AllowRemoteRPC существует, но имеет значение равное 0 , что необходимо исправить. Для применения изменений требуется перезагрузка.

поскольку для обмена сообщениями утилита msg.exe использует протокол SMB (Server Message Block ), на каждом компьютере, которому будут отправляться сообщения, должен быть открыт TCP порт 445

Примеры использования MSG :

msg * /server:Server «Тестовое сообщение » — отправить тестовое сообщение всем пользователям компьютера Server

msg * /server:192.168.0.1 «Тестовое сообщение » — отправить тестовое сообщение всем пользователям компьютера с IP-адресом 192.168.0.1

msg RDP-Tcp#0 /server:TSServer «Тестовое сообщение» — отправить тестовое сообщение пользователю терминальной сессии с именем RDP-Tcp#0 на компьютере TSServer

msg console /server:Windows7 «Тестовое сообщение» — отправить тестовое сообщение текущему локальному пользователю компьютера Windows7

msg console «Тестовое сообщение» — отправка тестового сообщения от пользователя сеанса RDP локальному пользователю. Если эта команда выполняется не пользователем терминальной сессии, то сообщение будет отправлено локальным пользователем самому себе.

Для выполнения команды msg от имени другого пользователя можно воспользоваться утилитой PSExec из пакета PSTools или штатным средством runas.exe

psexec -u otheruser -p otherpass msg * /server:win10 TEST message

runas /user:otheruser «msg * /server:win10 Test message»

Сообщения, отправляемые командой msg локальному пользователю компьютера с операционной системой Windows XP, который отсутствует ( еще не вошел в Windows ) отображаются в окне с приглашением к регистрации в системе и могут быть доступны посторонним.

Вопрос 2. Механизм сообщений в ОС Windows : назначение, принципы функционирования, структура сообщения, программные приемы обработки сообщений. Пример программы, выводящей в окне слово «ТЕСТ — ОК» при щелчке правой клавиши мыши, если нажаты на клавиатуре

Добавил: DMT
Дата создания: 30 декабря 2007, 18:55
Дата обновления: 9 января 2008, 23:29
Просмотров: 14907 последний сегодня, 6:51
Комментариев: 1

Вопрос 2. Механизм сообщений в ОС Windows : назначение, принципы функционирования, структура сообщения, программные приемы обработки сообщений. Пример программы, выводящей в окне слово «ТЕСТ – ОК» при щелчке правой клавиши мыши, если нажаты на клавиатуре клавиши Ctrl + Shift + Alt .

Windows основана на передаче сообщений ( message ). В основе системы лежит механизм, транслирующий практически каждое событие в сообщение. Типичное приложение построено на основе цикла сообщении , который принимает эти сообщения и отправляет их к соответствующим функциям — обработчикам сообщений.

Хотя сообщения передаются приложениям, они адресованы окнам, представляющим некую абстрактную сущность, через которую взаимодействуют пользо­ватель и приложение.

Передача сообщений — это способ, при помощи которого в Windows организован обмен информацией между отдельными подсистемами, приложениями или между отдельными модулями одного и того же приложения. Каждое Windows-приложение построено на основе цикла сообщений. Цикл сообщении повторно вызывает функции GetMessage или PeekMessage и получает сообщения, которые затем передает оконной процедуре через функцию DispatchMessage .

Сообщение представляет собой структуру данных:

Сообщения могут быть отправлены или посланы приложению. Отправленные сообщения помещаются в очередь сообщений, из которой функции GetMessage или PeekMessage получают эти сообщения. В п po тивоположность этому посылка сообщения означает немедленный вызов оконной процедуры, обходя очередь сообщений и цикл сообщений.

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

Windows содержит в себе системную очередь сообщений, куда последние могут поступать от драйверов устройств ввода/вывода или от приложений, а также несколько очередей сообщений для каждого приложения.

Идентификаторы сообщений задаются в заголовочных файлах Windows . Сообщения представляются каждым простым событием, каждое простое действие посыла­ется окну для обработки. Вместо обработки всех возможных сообщений приложение имеет свободу выбора; необработанные сообщения передаются в функции обработки сообщений операционной системы по умолчанию.

Уникальный идентификатор сообщения можно получить вызовом функции RegisterWindowMessage . Использование собственных типов сообщений позволяет частям приложения связываться между собой; разные приложения также могут обмениваться информацией таким способом.

По мере генерации приложениями, сообщения попадают вначале в общую системную очередь и затем распределяются в очереди отдельных приложений. Действие, выполненное над любым органом управления, приводит к генерации соответствующего сообщения и помещения этого сообщения в очередь приложения. Приложение Windows постоянно анализирует содержимое своей очереди сообщений. Когда в очереди появляется сообщение от какого-либо органа управления, приложение выполняет соответствующее действие. В очередь сообщений приложения Windows заносит сообщение, содержащее идентификатор использованного органа управления. Приложение анализирует очередь сообщений и выполняет обработку сообщений. В Windows используется многоуровневая система сообщений.

Сообщения низкого уровня вырабатываются передаются операционной системе Windows, которая на их основе формирует сообщения более высокого уровня.

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

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

Пример программы, выводящей в окне слово «ТЕСТ – ОК» при щелчке правой клавиши мыши, если нажаты на клавиатуре клавиши Ctrl + Shift + Alt .

Читайте также:  Как открыть порт 4444 kali linux
Оцените статью