Без рубрикиWindows

Как отослать сообщение всем пользователям терминального сервера, если нужно предупредить людей о перезагрузке, обновлении 1С, работах на файловом сервере или закрытии RDS-сеансов? В старых инструкциях часто вспоминают Terminal Services и устаревшие утилиты, но в современных Windows Server нормальный минимум выглядит проще: msg для быстрых уведомлений, quser для проверки сеансов и PowerShell-командлеты RDS там, где есть полноценная ферма с Connection Broker.

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

Когда это нужно

  • перед перезагрузкой терминального сервера;
  • перед установкой обновлений Windows или прикладного ПО;
  • перед обслуживанием базы, сетевой папки, 1С или профилей пользователей;
  • когда нужно быстро попросить пользователей сохранить документы и выйти из сеанса;
  • при аварийной ситуации, если часть пользователей всё ещё работает на сервере.

Если сервер один и вы вошли на него с правами администратора, обычно хватает msg *. Если серверов несколько и есть RDS-коллекции, лучше работать через модуль RemoteDesktop: он понимает хост и ID сеанса, а не только локальную машину.

Как отослать сообщение всем пользователям терминального сервера в Windows Server

Быстрый способ: команда msg

Команда msg отправляет сообщение пользователю или сеансу на RD Session Host. Самый короткий вариант для всех активных сеансов на текущем сервере выглядит так:

msg * "Через 15 минут сервер будет перезагружен. Сохраните документы и завершите работу."

Звёздочка означает все сеансы на сервере. Текст лучше брать в кавычки, особенно если в сообщении есть пробелы, двоеточия или русские буквы.

Сообщение с таймером ожидания

Параметр /time задаёт, сколько секунд сообщение будет висеть на экране, если пользователь его не закроет:

msg * /time:120 "Плановые работы через 10 минут. Пожалуйста, сохраните открытые документы."

Это не таймер перезагрузки. Это только время показа окна сообщения.

Сообщение пользователям на другом сервере

Если нужно отправить уведомление на конкретный RD Session Host, используйте параметр /server:

msg * /server:RDS01 "Через 10 минут начнётся обслуживание RDS01. Сохраните работу."

Команду запускайте от имени пользователя, у которого есть права на управление сеансами на целевом сервере. На практике это обычно администратор домена, локальный администратор сервера или учётная запись с делегированными правами для RDS.

Сначала проверьте, кто подключен

Перед рассылкой полезно посмотреть текущие RDS-сеансы. Для этого подходят quser или полная форма query user:

quser
query user

В выводе будут имя пользователя, имя сеанса, ID, состояние и время простоя. ID пригодится, если нужно отправить сообщение не всем, а конкретному сеансу.

msg 5 "Пожалуйста, закройте 1С. Через 5 минут начнётся обслуживание базы."

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

PowerShell для RDS-фермы

В среде с Remote Desktop Connection Broker лучше не собирать пользователей вручную по каждому серверу. В модуле RemoteDesktop есть команды Get-RDUserSession и Send-RDUserMessage. Они работают с RDS-развёртыванием и позволяют адресовать сообщение конкретному хосту и ID сеанса.

Пример для отправки сообщения всем пользовательским сеансам в развёртывании:

$messageTitle = "Плановые работы"
$messageBody  = "Через 15 минут начнётся обслуживание RDS. Сохраните документы и выйдите из сеанса."

Get-RDUserSession | ForEach-Object {
    Send-RDUserMessage -HostServer $_.HostServer `
                       -UnifiedSessionID $_.UnifiedSessionID `
                       -MessageTitle $messageTitle `
                       -MessageBody $messageBody
}

Здесь важно не путать ID сеанса между разными хостами. Microsoft прямо указывает, что ID уникален только в контексте конкретного session host. Поэтому в Send-RDUserMessage передаются и HostServer, и UnifiedSessionID.

Чем заменить устаревшие варианты

В старых заметках можно встретить net send. Для современных Windows Server это плохой ориентир: команда относится к другой эпохе Windows и не является нормальным способом уведомлять RDS-пользователей. Для терминального сервера используйте msg, а для RDS-фермы — PowerShell-модуль RemoteDesktop.

Ещё один пережиток — рассылать сообщения без проверки сеансов. Это вроде бы быстрее, но на живом сервере лучше потратить 10 секунд на quser. Так вы увидите, есть ли активные пользователи, сколько отключённых сеансов висит и кому сообщение вообще должно прийти.

Готовые примеры для администратора

Предупредить всех о перезагрузке

msg * /time:180 "Через 15 минут сервер будет перезагружен. Сохраните документы и завершите работу."

Предупредить всех на удалённом RDS-хосте

msg * /server:RDS01 /time:180 "RDS01 будет перезагружен через 15 минут. Сохраните работу."

Посмотреть пользователей и написать конкретному сеансу

quser
msg 7 "Пожалуйста, выйдите из программы. Начинается обслуживание."

Сделать простую рассылку по нескольким серверам

$servers = "RDS01", "RDS02", "RDS03"
foreach ($server in $servers) {
    msg * /server:$server /time:180 "Через 15 минут начнутся плановые работы. Сохраните документы."
}

Что проверить, если сообщение не приходит

  • Команда запущена с достаточными правами. Обычный пользователь не всегда может отправлять сообщения чужим сеансам.
  • Имя сервера указано правильно. Для удалённого хоста используйте /server:ИМЯ_СЕРВЕРА.
  • Пользователь действительно находится в RDP-сеансе. Проверьте это через quser.
  • Вы не путаете локальный сервер и RDS-ферму. Для фермы с Connection Broker удобнее PowerShell-командлеты RDS.
  • Сообщение не слишком длинное и взято в кавычки. Для коротких аварийных уведомлений это банально надёжнее.

Безопасная схема перед обслуживанием

Для реального обслуживания терминального сервера я бы действовал так:

  • проверить активные сеансы командой quser или Get-RDUserSession;
  • отправить первое предупреждение за 15-30 минут;
  • повторить сообщение за 5 минут;
  • посмотреть, кто остался активным;
  • при необходимости связаться с конкретными пользователями или отправить точечное сообщение по ID сеанса;
  • только после этого завершать сеансы, перезагружать сервер или останавливать службы.

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

Кратко

  • msg * — быстрый способ отправить сообщение всем сеансам на текущем терминальном сервере;
  • msg * /server:RDS01 — отправка всем пользователям конкретного RDS-хоста;
  • quser или query user — проверка подключённых пользователей;
  • Get-RDUserSession + Send-RDUserMessage — более правильный вариант для RDS-развёртывания с несколькими хостами;
  • net send не стоит использовать как современную рекомендацию для Windows Server.
0 0 голоса
Article Rating
guest
0 Комментарий
Старые
Новые Популярные