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

Обновлено: 23.11.2024

Простая задача в предыдущих версиях — открыть диспетчер задач, пользователей, выбрать всех, отправить сообщение.

В 2012 году нельзя было выбрать более одного пользователя. Поэтому, если я хочу отправить им сообщение, мне придется делать это по одному.

Я попробовал команду msg в командной строке с повышенными привилегиями, но она выдает ошибку - настройка разрешений, которую нельзя найти (не уверен, что это слово, но мне оно нравится) в 2012 году.

Почему такая простая задача оказывается такой сложной? Я бы продолжил разглагольствовать о 2012 году, но сдержу язык. Достаточно сказать - враг хорошего лучше.

Заранее спасибо

Популярные темы в Windows Server

Кевин (программное обеспечение SystemTools)

Поскольку вы использовали диспетчер задач, я предполагаю, что вы делали это на самом сервере? Если вы открываете командную строку, введите команду «msg», чтобы получить синтаксис.

Я думаю, это будет:

Сообщение * "Купи мне обед"

16 ответов

Саймон Мэтьюз

Что не так с Server 2012 R2? Я нашел его превосходным. 2012 год был ужасен, но R2 великолепен.

Кевин (программное обеспечение SystemTools)

Поскольку вы использовали диспетчер задач, я предполагаю, что вы делали это на самом сервере? Если вы открываете командную строку, введите команду «msg», чтобы получить синтаксис.

Я думаю, это будет:

Сообщение * "Купи мне обед"

Ккишкиккий

Я думаю, что Windows Server 2k12 R2 — один из лучших когда-либо созданных серверов Windows!

ответ Кевина правильный... попробуйте

В своем исходном сообщении я упоминал об использовании команды msg, но получаю сообщение об ошибке.

Сообщение появляется только у меня, но больше ни у кого — да, я вошел в систему как пользователь с правами администратора и открываю командную строку от имени администратора.

Ошибка отправки сообщения в консоль сеанса: ошибка 2147500058

Ошибка [2147500058]: Не удалось запустить серверный процесс, так как файл configure

идентификатор d неверен. Проверьте имя пользователя и пароль.

Когда я исследую это, я получаю сообщения о настройке разрешений, но все они относятся к 2008 году.

При дальнейшем тестировании сообщение доходит до пользователей, но я не уверен, откуда это сообщение об ошибке. Спасибо всем.

Кевин (программное обеспечение SystemTools)

Итак, если вы ввели:

Было бы любопытно, если бы вы получили ту же ошибку. '*' отправляется каждому сеансу, поэтому у одного из них возникла проблема. Но да ладно, это работает!

чтобы отправить сообщение, запустите cmd от имени администратора

Каков синтаксис для отправки этого сообщения всем зарегистрированным пользователям домена на их индивидуальных ПК?

Как назначить обычному пользователю TS разрешения на отправку сообщений?

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

MSG [Username Sessionname Sessionid @filename] Это позволяет отправлять сообщения очень определенным пользователям или всем сеансам, пропустив эту часть и поставив *

Отправка всем пользователям будет выглядеть следующим образом.

MSG * /Server: Выйдите из системы как можно скорее!

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

MSG * Пожалуйста, выйдите как можно скорее

Вы увидите что-то подобное (поскольку это будет доступно всем пользователям)

msg * (введите сообщение)

Единственная проблема с этим, я просто хочу сделать, чтобы люди в этом районе, там 12 районов. у нас 2500 пользователей.

Эта простая задача должна быть встроена.

Я попытался ответить Кевину. но он не отображает экран клиентов .. нужно какое-либо обновление gp?

Чтобы уведомить пользователей о перезагрузке сервера, вы можете использовать модификатор -c (комментарий) в команде shutdown, чтобы отправить всем пользователям сообщение о перезагрузке сервера.

Невротик

На сервере 2016 подстановочный знак не работает.

Делаем это на контроллере домена, войдя в систему как администратор домена с повышенными правами CMD. В этом посте мы предположим, что мой контроллер домена называется «ID10T»
MSG * «Это тест» — в результате сообщение будет получено только на локальном компьютере.
MSG * /SERVER:ID10T "Это тест" -- также приведет к тому, что только локальный компьютер получит сообщение.
MSG /SERVER:* "Это тест" -- сначала запрашивает введите сообщение для отправки; завершите сообщение, нажав CTRL-Z на новой строке, затем ENTER. Поэтому я снова набираю сообщение «Это тест» и нажимаю ENTER, чтобы получить новую строку, затем снова нажимаю CTRL-Z и ENTER. Теперь я получаю эту ошибку: Ошибка 1722 при получении имен сеансов.

Выполнение этого на моей рабочей станции из учетной записи администратора домена с повышенными правами CMD.
MSG * «Это тест» — сообщение будет получено только на локальном компьютере.
MSG * /SERVER:ID10T "Это тест" -- приведет к тому, что только контроллер домена получит сообщение.
MSG /SERVER:* "Это тест" -- сначала попросит меня ввести сообщение для отправки , нажмите CTRL-Z на новой строке и снова нажмите ENTER. Та же ошибка, что и выше, ошибка 1722.

Моя цель — отправить сообщение всем пользователям. Я могу отправлять прямые сообщения пользователю или рабочей станции, используя следующее, но не могу использовать подстановочный знак * для всех.

В этом примере я отправляю сообщение с контроллера домена, вошедшего в систему как администратор домена с повышенными правами CMD. Пользователь, которому я отправляю сообщение, зарегистрирован на рабочей станции с именем «PEBKAC», а имя пользователя — «PICNIC» (уже заметили тенденцию?)
MSG /SERVER:PEBKAC Picnic «Это тест» — - отобразит сообщение на этой рабочей станции для пользователя.
MSG /SERVER:* Пикник "Это тест" -- Ошибка 1722 при получении имен сеансов.

Итак, моя следующая попытка — использовать файл, в котором я определяю всех своих пользователей, а затем вызывать этот файл в синтаксисе. Я не могу найти информацию об использовании этого файла нигде в Интернете, где мне хранить файл и в каком каталоге? Какие поля обязательны в файле и в каком формате? Возможно, файл примера будет полезен и в качестве шаблона. Любая помощь, которую вы можете предложить моим друзьям, будет принята с благодарностью!

Спасибо,
Джон Фестер

Эта тема заблокирована администратором и больше не открыта для комментариев.

PowerShell. Майкрософт 365. Лазурь. Автоматизация. Кибербезопасность

Вы помните команду net send? А вы помните о проблемах безопасности? На прошлой неделе я играл с msg.exe. Msg — это «новая» сетевая отправка. Я попытался отправить сообщение всем пользователям и компьютерам в моем домене. Почему? Я хотел поручить всем пользователям закрыть все открытые программы. И теперь я хочу сохранить и поделиться этими знаниями в виде этой записи в блоге.

Введение (msg.exe)

Msg отправляет сообщение пользователю. Этот пользователь должен войти в систему как пользователь домена (профиль домена). Это означает, что следующее работает только в доменной среде. Для сетевых специалистов: msg использует порт 445 (SMB/CIFS). Если вы отправляете сообщение пользователю, вы должны указать имя компьютера и имя пользователя. Или вы можете попробовать отправить сообщение самому себе:

* означает, что сообщение отправляется всем зарегистрированным пользователям. Имейте в виду, что Windows — многопользовательская операционная система. Не забывайте о других! 😉

Предпосылки

Заголовок несколько вводит в заблуждение. Да, мы собираемся отправлять сообщения всем пользователям, но фактически всем компьютерам. Предположим, что все ваши клиентские компьютеры хранятся в определенной организационной единице, называемой рабочими станциями. Вы хотите сообщить всем пользователям, вошедшим в систему на этих компьютерах. Я собираюсь использовать Invoke-Command. Убедитесь, что ваши клиентские компьютеры принимают команды Remote PowerShell. Вы можете запустить Enable-PSRemoting на каждом из них. Или вы можете настроить WinRM с помощью групповых политик:

Обзор

  • Все компьютеры должны находиться в одном домене
  • WinRM необходимо включить на клиентских компьютерах, выполнив команду Enable-PSRemoting или настроив групповые политики, как описано в приведенной выше ссылке. Обратите внимание, что в операционных системах Windows Server 2012/2016 WinRM включен по умолчанию, но не в клиентских системах Windows.

Отправка сообщений всем пользователям: PowerShell и Msg.exe в действии

Client01 является членом рабочей станции OU. Client01 получает сообщение.

Удачи, играя с msg!

См. также

Чтобы узнать больше об удаленных действиях, см. также:

Поделиться:

Связанные

Опубликовано Патриком Грюнауэром

Я пытаюсь использовать переменную для msg, но возникает ошибка – см. ниже:

Сообщение от STDIN пусто; сообщение не отправлено
+ CategoryInfo : NotSpecified: (Сообщение от ST… сообщение не отправлено: строка) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
+ PSComputerName : DESKTOP-U1NMD2N

Здравствуйте, используйте Read-Host вместо Write-Host.

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

Сначала добавьте цикл IF, чтобы проверить, отвечает ли компьютер на ping.

Во-вторых, используйте новый параметр многопоточности — Parallel, доступный в Powershell 7.

Для этого вам необходимо установить Powershell 7. Просто выполните следующие действия:

Я использую его следующим образом и запускаю с перезапускаемого сервера:

(Get-ADComputer -SearchBase "OU=Workstations,DC=blah,DC=blah" -Filter *).Name |
ForEach-Object -Parallel IF (Test-Connection $_ -Quiet) Invoke-Command -ComputerName $_
>
>
Start-Sleep -Seconds 300 ; Перезагрузить-Компьютер-Принудительно

Спасибо! Хорошая демонстрация функции Parallel в PowerShell 7. Отлично!

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

Мне нужно, чтобы он работал на каждой рабочей станции.

Ниже показано, что у меня есть, но я получаю

Запуск процесса: доступ запрещен

В этом случае вам сложно помочь, потому что код выглядит хорошо, но сообщение об ошибке понятно. У вас недостаточно прав. Проверьте свой аккаунт. Администратор домена? Лучший, П

Извините, я просто использовал это для отладки, не хотел вырезать и вставлять это. Я пытаюсь создать для этого графический интерфейс для массовой рассылки сообщений на все компьютеры в организации. $x создается пользователем путем ввода в диалоговое окно

Это полный скрипт, который:

$okButton = New-Object System.Windows.Forms.Button
$okButton.Location = New-Object System.Drawing.Point(75,120)
$okButton.Size = New-Object System. Drawing.Size(75,23)
$okButton.Text = 'OK'
$okButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $okButton
$form.Controls.Add($okButton)

$cancelButton = New-Object System.Windows.Forms.Button
$cancelButton.Location = New-Object System.Drawing.Point(150,120)
$cancelButton.Size = New-Object System. Drawing.Size(75,23)
$cancelButton.Text = 'Отмена'
$cancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.CancelButton = $cancelButton
$form.Controls.Add($cancelButton)

$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,20)
$label.Size = New-Object System.Drawing.Size(280,20)
$label.Text = 'Пожалуйста, введите информацию в поле ниже:'
$form.Controls.Add($label)

$textBox = New-Object System.Windows.Forms.TextBox
$textBox.Location = New-Object System.Drawing.Point(10,40)
$textBox.Size = New-Object System.Drawing.Size(260,20)
$form.Controls.Add($textBox)

if (($result -eq [System.Windows.Forms.DialogResult]::OK))
$x = $textBox.Text
>

(Get-ADComputer -SearchBase "OU=Test_Devices,OU=Test_OU,OU=Dept OU,DC=domain,DC=com" -Filter *).Name | Объект Foreach >

Можно попробовать поместить команду Get-ADcomputer в скобки условия If. Что-то не так с вашей переменной $x.

(Get-ADComputer -SearchBase "OU=TestOU,DC=test,DC=com" -Filter *).Name | Объект Foreach >

Мне пришлось добавить $usingx вместо $x, чтобы переменная заработала.

«Блоки сценариев PowerShell по умолчанию не являются лексическими замыканиями. Блок скрипта, переданный Invoke-Command, не сохраняет текущее значение параметра $Message при запуске на другом компьютере.

Когда блок запускается в удаленном сеансе, он использует текущее значение $Message в этом сеансе. Поскольку эта переменная, скорее всего, имеет значение $null, это сообщение будет исключено из вашей команды».

Microsoft удалила команду net send, начиная с Windows Vista, и эта команда была заменена командой msg (msg.exe), но только профессиональные и бизнес-версии имеют возможность отправлять сетевые сообщения с помощью команды msg.

Примечание. Вы можете попробовать нашу расширенную замену команде msg - мессенджер LanTalk NET с утилитой командной строки. LanTalk NET может отправлять сообщения и даже файлы через командную строку.

Использование

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

Полный список параметров и опций команды msg с вариантами использования приведен ниже:

msg имя пользователя /сервер:имя_сервера /время:секунды /v /w /? текст сообщения

msg имя сеанса /сервер:имя_сервера /время:секунды /v /w /? текст сообщения

msg sessionID /server:servername /time:seconds /v /w /? текст сообщения

msg @filewithnames /server:servername /time:seconds /v /w /? текст сообщения

msg * /server:servername /time:seconds /v /w /? текст сообщения

Подробное описание:

имя пользователя — имя целевого пользователя.

sessionname — имя сеанса, созданное администратором при настройке сеанса.

sessionID — значение идентификатора сеанса.

filewithnames — путь к файлу, содержащему список имен пользователей, имен сеансов и идентификаторов сеансов, которым следует отправить сообщение.

messagetext — текст сообщения, которое вы хотите отправить пользователям (сеансы и т. д.). Если сообщение не найдено, для чтения текста сообщения будет использоваться стандартный ввод STDIN.

server:servername — указывает на терминальный сервер. Текущий терминальный сервер будет использоваться, если он не указан.

время:секунды – устанавливает время ожидания перед получением подтверждения от целевого сеанса о получении сообщения.

w — будет ждать ответа от целевого пользователя или пользователей.

v — отображает подробную информацию о каждом шаге команды msg.

<р>? - Отображает справку по синтаксису команды msg и информацию о параметрах.

Как отправлять сообщения с помощью команды msg

Чтобы отправить сообщение с текстом "время обеда" всем сеансам пользователя RON, используйте следующую команду в командной строке:
msg RON Время обеда?

Если вы хотите отправить сообщение всем пользователям, которые хранятся в файле USERS, используйте эту команду:
msg @users Пожалуйста, выйдите из системы через 10 минут в связи с техническим обслуживанием сервера

Для просмотра сеанса другого пользователя необходимо использовать встроенную утилиту Shadow. Например: Имеется VDS-сервер под управлением Windows Server 2012/2016 и на нем зарегистрированы два пользователя — Администратор и Пользователь. Допустим, имя нашей учетной записи — administrator, и мы хотим увидеть экран сеанса пользователя .

Выполнить командную строку: "Ctr + R" --> "cmd". Чтобы получить идентификатор сеанса, введите query user в командной строке:

Итак, зная идентификатор сеанса, подключитесь к пользователю в режиме теневого копирования

Нажмите "Пуск" ---→ "Выполнить" --→ " mstsc /shadow:2" --→ "Ок":

Вы увидите следующее сообщение:

В этот момент Пользователь увидит окно запроса на удаленный мониторинг:

Мы получаем доступ, когда Пользователь принимает запрос.

Настройки подключения

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

Нажмите: «Пуск» -> «Администрирование» -> «Управление компьютером» -> «Локальные пользователи и группы» -> «Пользователи».

Дважды щелкните имя пользователя и выберите вкладку "Удаленное управление":

В параметре "Требуется разрешение пользователя" снимите флажок и выберите нужный уровень контроля сеанса пользователя.

Читайте также: