Показать полную графическую версию : отправка сообщений пользователям AD
Igor Potapov
02-11-2016, 17:13
С помощью какого штатного средства можно отправить всем пользователям домена (или группе пользователей) сообщение и как? Все пользователи под управлением виндовс 7 и 10.
1) net send - только для виндовс ХР или менее
2) msg.exe - только для удалённого рабочего стола
подскажите, какой же вариант для AD?
WindowsNT
04-11-2016, 09:55
Нет стандартного способа. Вот я писал такой скрипт:
$objDomain = New-Object System.DirectoryServices.DirectoryEntry("LDAP://OU=LV,OU=Computers,OU=Company,DC=domain,DC=local")
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher($objDomain,"(objectCategory=computer)",@('name'))
$objSearcher.FindAll() | %{$_.properties.name} | %{cmd /c "msg console /server:$_ /time:300 Alarma! El ritmo fatal!"}
Но уткнулся в ряд проблем. Например, а у кого есть права посылать сообщение? А все ли консольные сессии доступны?
Ай, в итоге пришлось отказаться.
WindowsNT, и что-нибудь придумали на замену?
WindowsNT
04-11-2016, 16:49
Для получения статуса сессии console требовались права адм, это раз.
Второе - команда cmd отрабатывает минимум несколько секунд, для хотя бы 500 машин нужны десятки минут. Это проблема.
Отказались мы в итоге от идеи рассылать сообщения. Решили, что такая схема работает лучше:
Звонок руководителю > он звонит паре человек в своём отделе > люди перезваниваются в пределах отдела.
Второе - команда cmd отрабатывает минимум несколько секунд, для хотя бы 500 машин нужны десятки минут. Это проблема. »
Спасибо, ясно. Ваша идея с msg.exe мне нравится.
Второе - команда cmd отрабатывает минимум несколько секунд, для хотя бы 500 машин нужны десятки минут. Это проблема. »
А не пробовали тупо использовать параллельные сессии, наподобие:
… $objSearcher.FindAll() | %{$_.properties.name} | %{Start-Process -FilePath "c:\Windows\System32\msg.exe" -ArgumentList "console /server:$_ /time:300 Alarma! El ritmo fatal!" -WindowStyle Hidden}
?! Что думаете?
Тут можно, конечно, и не все 500 зараз, а попробовать использовать -PassThru и очередь на какое-то определённое количество одновременных процессов, разумеется, с предварительной проверкой доступности хотя бы пингом, дабы msg.exe не топтался в бесполезных попытках достучаться до выключенной машины.
Для получения статуса сессии console требовались права адм, это раз. »
Не могли бы Вы пояснить, в каком месте приведённого Вами кода это нужно? Или вообще не в том дело? Не соображу.
И, если ещё не устали от вопросов — пояснить более подробно по этим пунктам:
Например, а у кого есть права посылать сообщение? А все ли консольные сессии доступны? »
WindowsNT
07-11-2016, 12:14
Мы хотим послать сообщение командой msg не абы куда, а в консольную сессию. Для этого её нужно "увидеть" и опознать.
Для энумерации сессий (session enumeration) требуются права адм. на удалённой машине. Так это отрабатывало у меня. Это что касается прав.
Вот на этом я и остановился, так как выдавать такие права всем подряд не собирался.
Проверять параллельность запуска cmd при этом уже было неинтересно .)
По доступности консольных сессий так: не все сотрудники присутствуют у компьютера.
- кто-то залокал машину и ушёл, он сообщения не увидит. Кто-то не логонился вообще;
- кто-то проигнорирует очередное выскочившее окно или именно в этот момент нажмёт пробел - всё, окна нет;
- иногда сообщение почему-то не появляется впереди других окон, остаётся позади;
- в целом, сообщения (например, смс) от явного вызова (например, звонка) отличаются тем, что на них можно реагировать в отложенном режиме.
Подсчитав процент успешно получивших, понявших и отреагировавших на сообщение людей, контора решила экстренные уведомления таки продолжать рассылать звонками.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC