Для того, чтобы отправить сообщение по сети, на компьютеры под управлением Windows 7,8,10 используется встроенная команда msg. Ранее, в windows 2000, XP, 2003, сообщения отправляли с помощью команды net send <comp> “TEXT”
В Windows 7,8,10 net send не поддерживается, поэтому формат отправки изменился:
1 2 3 |
msg /SERVER:name_computer * "Text" |
По умолчанию, возможность принимать сообщения от удаленного компьютера, в Windows 7,8,10 отключена. Для того, чтобы включить возможность принимать удаленные сообщения, нужно изменить параметр в реестре ПК. Открываем ветку реестра на ПК, куда будем отправлять сообщение. На Windows Server этот параметр уже включен. Также, менять реестр можно удаленно, для этого нужно включить службу “Удаленный реестр” в управлении компьютером.
1 2 3 |
HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\ |
Меняем в параметре “AllowRemoteRPC” с 0 на 1 и перегружаем ПК, после чего ПК готов принимать сообщения.
Для того, чтобы отправить сообщение на несколько компьютеров, можно сделать небольшой скрипт.
Например, создадим файл msgsend.vbs, и в него пропишем следующий код:
1 2 3 4 5 6 7 8 9 10 11 |
Set WshShell = CreateObject("WScript.Shell") dim MyArray textsend="Test send" MyArray = Array("Comp1","Comp2") For each index in MyArray WshShell.Run "msg.exe /time:600 /server:"&index & " * " & textsend,0, True Next |
В этом примере, текст отправки прописан в переменной textsend, а компьютеры – в массиве MyArray.
Расположение текста отправки в файле не совсем удобно. Лучше будет, если текст передавать в наш скрипт.
Пример: msgsend.vbs “Текст сообщения”
Для этого немного изменим скрипт, добавим одну строку Set objArgs = WScript.Arguments
Итог:
1 2 3 4 5 6 7 8 9 10 11 12 |
Set WshShell = CreateObject("WScript.Shell") Set objArgs = WScript.Arguments 'Добавили textsend=objArgs(0) 'Изменили dim MyArray MyArray = Array("Comp1","Comp2") For each index in MyArray WshShell.Run "msg.exe /time:600 /server:"&index & " * " & textsend,0, True Next |
Усложним задачу
В Windows есть такая служба – Служба удаленного управления Windows(WinRM), которая позволяет на удаленной машине запускать программы. На серверных OS, она запущенна по умолчанию, а вот на десктопных windows ее нужно будет запустить.
Далее, нужно запустить PowerShell от имени администратора и ввести команду, которая выполнит на удаленном ПК наш код:
1 2 3 |
Invoke-Command -computername server1 -scriptblock {msg * "Текст сообщения"} |
Здесь server1, это название управляемого сервера.
Всем удачи!
Invoke–Command –computername server1 –scriptblock {msg * “Текст сообщения”} -credential $cred
Имя “msg” не распознано как имя командлета, функции, файла сценария или выполняемой программы. Проверьте правильность написания имени, а также наличие и правильность пути, после чего повторите попытку.