Отправить сообщение всем подключённым пользователям Windows Server 2016 с ролью Службы удалённых рабочих столов (RDS) можно за минуту — и для этого не нужно устанавливать сторонние утилиты. В большинстве случаев хватает встроенных инструментов: msg в командной строке, оснастки Диспетчер серверов или PowerShell. Но есть нюансы: например, сообщение не отобразится, если пользователь работает в полноэкранном режиме или отключил уведомления. Далее разберём все работающие способы — от самого простого до автоматизированного.

Сразу уточним: терминальный сервер в Windows Server 2016 — это Role Remote Desktop Services (RDS), и сообщения рассылаются только активным сеансам. Если пользователь отключился (но сеанс не завершён), уведомление он получит при следующем подключении. А вот для разосланных пингов или оповещений о перезагрузке сервера есть отдельные команды — о них тоже поговорим.

Способ 1: командная строка (msg.exe)

Самый быстрый способ — утилита msg, встроенная в Windows. Она работает без установки дополнительных компонентов и позволяет отправить текстовое сообщение конкретному пользователю или всем сеансам сразу.

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

msg * /server:ИМЯ_СЕРВЕРА "Текст сообщения"

Где ИМЯ_СЕРВЕРА — это имя или IP-адрес вашего терминального сервера. Звёздочка (*) означает, что сообщение будет отправлено всем активным сеансам. Например:

msg * /server:192.168.1.10 "Сервер будет перезагружен через 10 минут. Сохраните данные!"

Если сервер один и вы выполняете команду локально, параметр /server можно опустить.

💡

Если сообщение не доходит, проверьте, включена ли служба Messenger (в Windows Server 2016 она отключена по умолчанию). Запустите её через services.msc или PowerShell: Start-Service Messenger.

У msg есть ограничения: сообщение отобразится только в том случае, если у пользователя открыт сеанс и он не заблокировал уведомления. Также текст ограничен 256 символами — длинные сообщения будут обрезаны.

Команда PowerShell Описание Пример
Get-RDUserSession Получает список всех активных сеансов RDS Get-RDUserSession -ConnectionBroker SRV01
Send-Message Отправляет сообщение конкретному пользователю Send-Message -UserName "user1" -Message "Тест"
msg * Отправляет сообщение всем сеансам msg * /server:SRV01 "Перезагрузка"

Способ 2: PowerShell для расширенного управления

PowerShell даёт больше гибкости: можно отправить сообщение только выбранным пользователям, проверить их активность или автоматизировать рассылку по расписанию. Для этого используем cmdlet Send-Message из модуля RDSAdmin или стандартный msg через Invoke-Expression.

Сначала подключите модуль RDS (если он не загружен):

Import-Module RemoteDesktop

Затем получите список активных сеансов:

Get-RDUserSession -ConnectionBroker ИМЯ_СЕРВЕРА

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

Invoke-Command -ComputerName ИМЯ_СЕРВЕРА -ScriptBlock { msg * "Ваше сообщение" }

Если нужно отфильтровать пользователей (например, отправить только тем, кто подключён более часа), используйте:

Get-RDUserSession | Where-Object { $_.DisconnectTime -eq $null -and (New-TimeSpan -Start $_.ConnectTime).TotalMinutes -gt 60 } | ForEach-Object { msg $_.UserName "Ваше сообщение" }

Способ 3: оснастка «Диспетчер серверов»

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

Откройте Диспетчер серверов и выполните следующие шаги:

  1. В левом меню выберите Службы удалённых рабочих столов → Обзор.
  2. В разделе Подключения нажмите на имя вашего сервера RDS.
  3. В центральной части окна выберите вкладку Сеансы — здесь отображаются все активные подключения.
  4. Выделите нужных пользователей (или все) и нажмите правой кнопкой мыши → Отправить сообщение.
  5. Введите текст сообщения и нажмите Отправить.

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

💡

Чтобы не пропустить ни одного пользователя, отсортируйте список по столбцу Состояние и выберите только активные сеансы (Active).

Способ 4: групповой политикой (для плановых уведомлений)

Если нужно отправлять сообщения по расписанию (например, за 30 минут до перезагрузки сервера), настройте групповую политику. Это актуально для больших инфраструктур, где терминальных серверов несколько.

Создайте новый объект групповой политики (GPO) и свяжите его с организационным подразделением (OU), содержащим ваши RDS-серверы. Затем:

  1. Откройте редакторе групповой политики и перейдите в раздел: Конфигурация компьютера → Политики → Административные шаблоны → Компоненты Windows → Службы удалённых рабочих столов → Узел сеансов удалённых рабочих столов → Ограничения времени сеанса.
  2. Найдите политику Уведомление о завершении сеанса и настройте её параметры:
    • Время до завершения сеанса — укажите, за сколько минут отправлять уведомление.
    • Текст сообщения — введите текст, который будет отображаться пользователям.
  3. Примените политику и обновите её на серверах с помощью gpupdate /force.
⚠️ Внимание: групповой политикой можно настроить только увидомления о завершении сеанса. Для произвольных сообщений этот метод не подходит — используйте msg или PowerShell.
Какой способ рассылки сообщений вы используете чаще всего?
Командная строка (msg.exe)
PowerShell
Диспетчер серверов
Групповая политика

Сравнение способов: какой выбрать

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

Способ Скорость Автоматизация Ограничения
msg.exe Мгновенно Да (через планировщик) Ограничение 256 символов, требует включённой службы Messenger
PowerShell Быстро Да Требует прав администратора, сложнее для новичков
Диспетчер серверов Медленно (ручной выбор) Нет Только для текущих сеансов, нет фильтрации
Групповая политика Долго (настройка) Да Только для уведомлений о завершении сеанса

Что делать, если сообщение не доходит

Если вы отправили сообщение, но пользователи его не получают, проверьте следующие моменты:

  • Служба Messenger — должна быть запущена на сервере. Проверьте в services.msc или через PowerShell: Get-Service Messenger | Start-Service.
  • Брандмауэр — убедитесь, что порт 135 (RPC) открыт для локальных подключений. В большинстве случаев он открыт по умолчанию, но если брандмауэр настроен строго, добавьте исключение.
  • Права доступа — вы должны выполнять команду от имени администратора или пользователя с правами на отправку сообщений.
  • Активные сеансы — сообщение отправляется только активным сеансам. Если пользователь отключился, оно не отобразится.

Практические примеры

Рассмотрим несколько реальных сценариев, с которыми сталкиваются администраторы.

Сценарий 1: Уведомление о перезагрузке сервера

Нужно предупредить всех пользователей о перезагрузке сервера через 15 минут. Используем msg:

msg * /server:SRV01 "ВНИМАНИЕ! Сервер будет перезагружен через 15 минут. Сохраните данные и закройте приложения."

Чтобы сделать это автоматически, создайте задачу в Планировщике задач, которая выполнит команду за 15 минут до перезагрузки.

Сценарий 2: Оповещение определённой группы пользователей

Нужно отправить сообщение только пользователям из отдела бухгалтерии. Используем PowerShell:

Get-RDUserSession | Where-Object { $_.UserName -like "*buh*" } | ForEach-Object { msg $_.UserName "Бухгалтерия: срочное собрание в 14:00" }

Здесь -like "*buh*" фильтрует пользователей, в имени которых есть buh (например, buh_ivanov).

Чек-лист перед рассылкой сообщений

Выполнено: 0 / 5

Часто задаваемые вопросы

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

Нет. Сообщения через msg или отправляются только активным сеансам. Если пользователь отключился (но сеанс не завершён), он получит уведомление при следующем подключении. Для гарантированной доставки используйте электронную почту или корпоративные мессенджеры.

Как отправить сообщение с форматированием (жирный текст, переносы строк)?

Встроенные инструменты (msg, PowerShell) не поддерживают форматирование. Сообщение будет отображаться как простой текст. Если нужно оформить уведомление красиво, используйте сторонние утилиты, например, PSWriteHTML для генерации HTML-писем и отправки их по почте.

Почему пользователи не видят сообщение, отправленное через msg?

Скорее всего, у них отключены уведомления или сеанс работает в полноэкранном режиме. Проверьте:

  • Служба Messenger запущена на сервере.
  • Пользователь не заблокировал уведомления в настройках Windows.
  • Сеанс активен (не отключён).
Можно ли отправить сообщение через с клиентской машины?

Нет. Команда msg и должны выполняться на самом терминальном сервере или с машины, у которой есть права на удалённое управление. С клиентской машины, подключённой по RDP, отправить сообщение всем пользователям не получится — только самому себе.