- Send message all users windows
- Постановка задачи
- Методы отправки сообщения на RDS ферме
- Как отправить предупреждение пользователям RDS через диспетчер задач
- Использование утилиты MSG
- Третий метод отправки сообщения пользователям RDS через Send-RDUser Message
- Справочная информация о команде net send
- Общие сведения о команде net send
- Использование команды net send
- Синтаксис команды net send
- Замечания по использованию команды net send
- Примеры использования команды net send
- Включение и отключение службы сообщений и net send
- SendMessage function (winuser.h)
- Syntax
- Parameters
- Return value
- Remarks
- SendMessageW function (winuser.h)
- Syntax
- Parameters
- Return value
- Remarks
- Examples
Send message all users windows
Добрый день! Уважаемые читатели и гости 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.
Если нужно отправить сообщение всем людям локально с того же сервера, где они работают, то просто введите:
Вот так, например в 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 ферму, то при выполнении скрипта получите сообщение
Справочная информация о команде net send
Общие сведения о команде net send
Net send это консольное приложение, входящее в состав некоторых версий Windows и предназначенное для отправки сообщений по локальной сети другому пользователю, компьютеру или псевдониму. Команда доступна только в Windows NT, 2000, XP, 2003 и недоступна в Windows 7, Vista, ME, 98, 95 и старше. В Windows XP начиная с Service Pack 2 команда net send по умолчанию отключена.
Использование команды net send
Для отправки собщений командой net send, запустите командный интерпретатор (командную строку). Чтобы запустить командный интерпретатор выберите пункт Выполнить из меню Пуск, наберите cmd и нажмите кнопку OK. Используете команду net c параметром send и другими параметрами в соответствии с синтаксисом команды. Служба сообщений отображает полученные сообщения в стандартном диалоговом окне сообщений Windows.
Синтаксис команды net send
username — имя пользователя, имя компьютера или псевдоним, которому требуется отправить сообщение;
* — отправка сообщений всем членам домена или рабочей группы;
/domain[:domainname] — отправка сообщения всем именам в домене компьютера или в домене domainname;
/users — отправка сообщения всем пользователям, подключенным к серверу;
message — текст сообщения.
Замечания по использованию команды net send
Возможны трудности при использовании длинных имен получателей сообщений. Имена, используемые службой сообщений, имеют длину до 15 знаков.
Предельная длина широковещательных сообщений составляет 128 знаков. Предельная длина персональных сообщений — 1600 знаков.
Примеры использования команды net send
net send ivanov Отправить сообщение по локальной сети можно командой net send
Чтобы отправить сообщение всем пользователям, подключенным к компьютеру, с которого отправляется сообщение, введите:
net send /users Всем немедлено выйти из 1С!
Чтобы отправить сообщение всем пользователям в домене ukmz введите:
net send /domain:ukmz Электричество в здании будет отключено через 5 минут
Чтобы отправить сообщение всем пользователям в домене компьютера, с которого отправляется сообщение, введите:
net send * Господа, совещание при генеральном директоре состоится в 13:00
Включение и отключение службы сообщений и net send
Для включения службы сообщений с помощью консоли MMC выполните следующую последовательность действий: Зайдите в Панель управления. Откройте папку Администрирование, Службы. Найдите в списке «Службу сообщений» (Messenger). Откройте окно свойств службы. Выберите значение ‘Авто’ из списка ‘Тип запуска’ если вы хотите чтобы служба автоматически запускалась при загрузке Windows. Затем нажмите кнопку Пуск. Нажмите кнопку ОК.
Для отключения службы сообщений выполните следующую последовательность действий: Зайдите в Панель управления. Откройте папку Администрирование, Службы. Найдите в списке «Службу сообщений» (Messenger). Откройте окно свойств службы. Выберите значение ‘Вручную’ из списка ‘Тип запуска’. Затем нажмите кнопку Стоп. Нажмите кнопку ОК.
Для включения службы сообщений из командной строки введите в командном интерпретаторе следующие команды:
sc config messenger start= auto
net start messenger
Для отключения службы сообщений из командной строки введите в командном интерпретаторе следующие команды:
net stop messenger
sc config messenger start= disabled
SendMessage function (winuser.h)
Sends the specified message to a window or windows. The SendMessage function calls the window procedure for the specified window and does not return until the window procedure has processed the message.
To send a message and return immediately, use the SendMessageCallback or SendNotifyMessage function. To post a message to a thread’s message queue and return immediately, use the PostMessage or PostThreadMessage function.
Syntax
Parameters
A handle to the window whose window procedure will receive the message. If this parameter is HWND_BROADCAST ((HWND)0xffff), the message is sent to all top-level windows in the system, including disabled or invisible unowned windows, overlapped windows, and pop-up windows; but the message is not sent to child windows.
Message sending is subject to UIPI. The thread of a process can send messages only to message queues of threads in processes of lesser or equal integrity level.
The message to be sent.
For lists of the system-provided messages, see System-Defined Messages.
Additional message-specific information.
Additional message-specific information.
Return value
The return value specifies the result of the message processing; it depends on the message sent.
Remarks
When a message is blocked by UIPI the last error, retrieved with GetLastError, is set to 5 (access denied).
Applications that need to communicate using HWND_BROADCAST should use the RegisterWindowMessage function to obtain a unique message for inter-application communication.
The system only does marshalling for system messages (those in the range 0 to (WM_USER-1)). To send other messages (those >= WM_USER) to another process, you must do custom marshalling.
If the specified window was created by the calling thread, the window procedure is called immediately as a subroutine. If the specified window was created by a different thread, the system switches to that thread and calls the appropriate window procedure. Messages sent between threads are processed only when the receiving thread executes message retrieval code. The sending thread is blocked until the receiving thread processes the message. However, the sending thread will process incoming nonqueued messages while waiting for its message to be processed. To prevent this, use SendMessageTimeout with SMTO_BLOCK set. For more information on nonqueued messages, see Nonqueued Messages.
An accessibility application can use SendMessage to send WM_APPCOMMAND messages to the shell to launch applications. This functionality is not guaranteed to work for other types of applications.
SendMessageW function (winuser.h)
Sends the specified message to a window or windows. The SendMessage function calls the window procedure for the specified window and does not return until the window procedure has processed the message.
To send a message and return immediately, use the SendMessageCallback or SendNotifyMessage function. To post a message to a thread’s message queue and return immediately, use the PostMessage or PostThreadMessage function.
Syntax
Parameters
A handle to the window whose window procedure will receive the message. If this parameter is HWND_BROADCAST ((HWND)0xffff), the message is sent to all top-level windows in the system, including disabled or invisible unowned windows, overlapped windows, and pop-up windows; but the message is not sent to child windows.
Message sending is subject to UIPI. The thread of a process can send messages only to message queues of threads in processes of lesser or equal integrity level.
The message to be sent.
For lists of the system-provided messages, see System-Defined Messages.
Additional message-specific information.
Additional message-specific information.
Return value
The return value specifies the result of the message processing; it depends on the message sent.
Remarks
When a message is blocked by UIPI the last error, retrieved with GetLastError, is set to 5 (access denied).
Applications that need to communicate using HWND_BROADCAST should use the RegisterWindowMessage function to obtain a unique message for inter-application communication.
The system only does marshalling for system messages (those in the range 0 to (WM_USER-1)). To send other messages (those >= WM_USER) to another process, you must do custom marshalling.
If the specified window was created by the calling thread, the window procedure is called immediately as a subroutine. If the specified window was created by a different thread, the system switches to that thread and calls the appropriate window procedure. Messages sent between threads are processed only when the receiving thread executes message retrieval code. The sending thread is blocked until the receiving thread processes the message. However, the sending thread will process incoming nonqueued messages while waiting for its message to be processed. To prevent this, use SendMessageTimeout with SMTO_BLOCK set. For more information on nonqueued messages, see Nonqueued Messages.
An accessibility application can use SendMessage to send WM_APPCOMMAND messages to the shell to launch applications. This functionality is not guaranteed to work for other types of applications.
Examples
The winuser.h header defines SendMessage as an alias which automatically selects the ANSI or Unicode version of this function based on the definition of the UNICODE preprocessor constant. Mixing usage of the encoding-neutral alias with code that not encoding-neutral can lead to mismatches that result in compilation or runtime errors. For more information, see Conventions for Function Prototypes.