Вывод сообщения пользователю windows

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

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

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

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

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

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

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

Ошибка 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 ) отображаются в окне с приглашением к регистрации в системе и могут быть доступны посторонним.

Читайте также:  Как посмотреть все занятые порты linux

Сообщение пользователю в cmd

Какие возможности имеются в командном файле для привлечения внимания пользователя в случае какого-либо события? Команды ECHO во многих случаях недостаточно, ведь помимо просто вывода текста хотелось бы:

  • «поднимать» окно командного файла наверх (в смысле Z-order, конечно) или
  • показывать всплывающее окно с текстом и значками, показывающими серьёзность события (ошибка, предупреждение, событие)

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

Поднять окно командного файла

Чтобы поднять наверх окно командного файла, можно использовать возможности WSH: подготавливаем скрипт activate.js, который использует метод WshShell.AppActivate для окна, заголовок которого передаётся параметром командной строки:

Затем в командном файле устанавливаем заголовок окна и в нужный момент вызываем activate.js:

То есть если командный файл выполнился успешно, он тихо закрывается, не отвлекая пользователя. Если возникла ситуация, о которой нужно проинформировать пользователя, то окно поднимается наверх, показывая информацию об ошибке.

Для наглядности будет полезно выделить цветом информацию об ошибке.

Показать всплывающее сообщение

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

Всплывающее окно WshShell.Popup

Этот вариант использует возможности WSH и не требует установки дополнительных программ.
Используется метод WshShell.Popup в скрипте popup.js

Соответственно, командный файл вызывает его в случае ошибки:

Всплывающее окно NHMB

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


В заголовке окна отображается время в секундах (55), оставшееся до автоматического закрытия окна и продолжения работы командного файла.

Как отослать сообщение через Powershell

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

Если собираетесь использовать IP, или не в домене, то вы будете использовать не Kerberos, а NTLM и нужно сделать следующее:

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

Отправление сообщение пользователю компьютера через WinRM

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

Для того что бы отправить такое сообщение одному или нескольким пользователям через powershell нужно использовать:

Где:
ComputerName — имена одного или нескольких компьютеров, на которые будут отправлены сообщения. Можно и IP, но с оговорками выше.
Scriptblock — скрипт, который мы отсылаем на компьютеры. В нашем случае это msg

Сообщение будет выглядеть так:

Отправка сообщений всем пользователям компьютеров в AD

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

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

Далее, для каждого компьютера в переменной используем такую команду powershell:

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

Отправка сообщений через powershell пользователям терминального сервера

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

Читайте также:  Архитектура по windows forms

echo (вывод на экран) echo

Отображает сообщения или включает или отключает функцию вывода команд. Displays messages or turns on or off the command echoing feature. При использовании без параметров echo отображает текущее значение эха. If used without parameters, echo displays the current echo setting.

Синтаксис Syntax

Параметры Parameters

Параметр Parameter Описание Description
[вкл. | Откл.] [on | off] Включает или выключает функцию вывода команд. Turns on or off the command echoing feature. Команда по умолчанию включена. Command echoing is on by default.
Задает текст, отображаемый на экране. Specifies the text to display on the screen.
/? /? Отображение справки в командной строке. Displays help at the command prompt.

Комментарии Remarks

echo Команда особенно полезна при отключенном эхо . The echo command is particularly useful when echo is turned off. Чтобы отобразить сообщение, которое содержит несколько строк без отображения команд, можно включить несколько echo команд после команды echo off в пакетной программе. To display a message that is several lines long without displaying any commands, you can include several echo commands after the echo off command in your batch program.

После выключения эхо Командная строка не отображается в окне командной строки. After echo is turned off, the command prompt doesn’t appear in the Command Prompt window. Чтобы отобразить командную строку, введите команду echo on. To display the command prompt, type echo on.

Если используется в пакетном файле, Включение и вывод не влияют на параметр в командной строке. If used in a batch file, echo on and echo off don’t affect the setting at the command prompt.

Чтобы предотвратить вывод определенной команды в пакетном файле, вставьте @ знак перед командой. To prevent echoing a particular command in a batch file, insert an @ sign in front of the command. Чтобы предотвратить вывод всех команд в пакетном файле, включите команду echo off в начале файла. To prevent echoing all commands in a batch file, include the echo off command at the beginning of the file.

Чтобы отобразить символ канала ( | ) или перенаправления ( или > ) при использовании эха, используйте знак крышки ( ^ ) непосредственно перед символом канала или перенаправления. To display a pipe ( | ) or redirection character ( or > ) when you are using echo, use a caret ( ^ ) immediately before the pipe or redirection character. Например,, ^| ^> или ^ ). For example, ^| , ^> , or ^ ). Чтобы отобразить курсор, введите две крышки подряд ( ^^ ). To display a caret, type two carets in succession ( ^^ ).

Примеры Examples

Чтобы отобразить текущее значение echo , введите: To display the current echo setting, type:

Чтобы вывести на экран пустую строку, введите: To echo a blank line on the screen, type:

Не включайте пробел перед точкой. Don’t include a space before the period. В противном случае вместо пустой строки отображается точка. Otherwise, the period appears instead of a blank line.

Чтобы запретить вывод команд в командной строке, введите: To prevent echoing commands at the command prompt, type:

Когда эхо отключено, Командная строка не отображается в окне командной строки. When echo is turned off, the command prompt doesn’t appear in the Command Prompt window. Чтобы снова отобразить командную строку, введите команду echo on. To display the command prompt again, type echo on.

Чтобы предотвратить отображение на экране всех команд в пакетном файле (включая команду echo off ), в первой строке типа пакетного файла: To prevent all commands in a batch file (including the echo off command) from displaying on the screen, on the first line of the batch file type:

Команду echo можно использовать как часть оператора If . You can use the echo command as part of an if statement. Например, чтобы найти в текущем каталоге любой файл с расширением. rpt и вывести сообщение при обнаружении такого файла, введите: For example, to search the current directory for any file with the .rpt file name extension, and to echo a message if such a file is found, type:

Следующий пакетный файл выполняет поиск файлов с расширением txt в текущем каталоге и выводит сообщение с указанием результатов поиска: The following batch file searches the current directory for files with the .txt file name extension, and displays a message indicating the results of the search:

Если при выполнении пакетного файла не найдены TXT-файлы, отображается следующее сообщение: If no .txt files are found when the batch file is run, the following message displays:

Если TXT-файлы найдены при запуске пакетного файла, отображаются следующие выходные данные (в этом примере предполагается, что файлы File1.txt, File2.txt и File3.txt существуют): If .txt files are found when the batch file is run the following output displays (for this example, assume the files File1.txt, File2.txt, and File3.txt exist):

Вывод уведомлений пользователям с помощью PowerShell

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

Самый простой способ вывести окошко с произвольным тестом через подсистему сценариев Windows – Wscript.

Следующий код выведет обычное текстовое окно с необходимым текстом и кнопкой OK.

$wshell = New-Object -ComObject Wscript.Shell
$Output = $wshell.Popup(«Скрипт формирования отчета выполнен»)

С помощью различных свойств метода Popup вы можете настроить вид модального окна сообщения. В том числе можно вернуть в скрипт результаты ответа пользователя на вопрос (Да / Нет).

$Output = $wshell.Popup(«Скрипт формирования отчета завершен! Хотите вывести его на экран?»,0,»Отчет готов»,4+32)

Общий синтаксис и параметры метода Popup:

— строка, текст сообщения.

  • — необязательный, число. Количество секунд, по истечении которого окно будет автоматически закрыто.
  • — необязательный, строка. Текст заголовка окна сообщения.
  • — необязательный, число. Комбинация флагов, определяет тип кнопок и значка. Возможные значения флагов:
    • 0 — кнопка ОК.
    • 1 — кнопки ОК и Отмена.
    • 2 — кнопки Стоп, Повтор, Пропустить.
    • 3 — кнопки Да, Нет, Отмена.
    • 4 — кнопки Да и Нет.
    • 5 — кнопки Повтор и Отмена.
    • 16 — значок Stop.
    • 32 — значок Question.
    • 48 — значок Exclamation.
    • 64 — значок Information.
  • Описание: возвращает целое значение, с помощью которого можно узнать, какая кнопка была нажата пользователем. Возможные значения:

    • -1 — таймаут.
    • 1 — кнопка ОК.
    • 2 — кнопка Отмена.
    • 3 — кнопка Стоп.
    • 4 — кнопка Повтор.
    • 5 — кнопка Пропустить.
    • 6 — кнопка Да.
    • 7 — кнопка Нет.

    Более привлекательные и приятные взгляду всплывающие сообщения (ballons) можно вывести в Windows 7, 8.1 и 10 через API Windows Forms. Следующий PowerShell код выведет всплывающее сообщение рядом с панелью уведомлений Windows 10, которое автоматически исчезнет через 10 секунд.

    Add-Type -AssemblyName System.Windows.Forms
    $global:balmsg = New-Object System.Windows.Forms.NotifyIcon
    $path = (Get-Process -id $pid).Path
    $balmsg.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon($path)
    $balmsg.BalloonTipIcon = [System.Windows.Forms.ToolTipIcon]::Warning
    $balmsg.BalloonTipText = ‘Это текст всплывающего сообщения для пользователя Windows 10’
    $balmsg.BalloonTipTitle = «Внимание $Env:USERNAME»
    $balmsg.Visible = $true
    $balmsg.ShowBalloonTip(10000)

    Кроме того для создания красочных всплывающих сообщений в Windows 10 (PowerShell 5.0+)можно использовать отдельный PowerShell модуль BurntToast из галереи PowerShell.

    Модуль устанавливается из онлайн репозитория с помощью менеджера пакетов Windows 10:
    Install-Module -Name BurntToast

    Теперь, например, в ранее рассматриваемый скрипт автоматического отключение от Wi-FI сети при подключении к Ethernet можно добавить красочное уведомление:

    New-BurntToastNotification -Text «Отключение от Wi-Fi сети», «Вы были отключены от Wi-Fi сети, т.к. Вше устройство было подключено к скоростному Ethernet подключению.» -AppLogo C:\PS\changenetwork.png

    Итак, теперь вы знаете как вывести уведомление пользователя через PowerShell. Если у пользователя есть динамики, можно даже сыграть ему мелодию:

    Читайте также:  X551m asus драйвер windows 10
    Оцените статью