![]() |
отправка сообщений пользователям AD
С помощью какого штатного средства можно отправить всем пользователям домена (или группе пользователей) сообщение и как? Все пользователи под управлением виндовс 7 и 10.
1) net send - только для виндовс ХР или менее 2) msg.exe - только для удалённого рабочего стола подскажите, какой же вариант для AD? |
Нет стандартного способа. Вот я писал такой скрипт:
$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, и что-нибудь придумали на замену?
|
Для получения статуса сессии console требовались права адм, это раз.
Второе - команда 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 не топтался в бесполезных попытках достучаться до выключенной машины. Цитата:
И, если ещё не устали от вопросов — пояснить более подробно по этим пунктам: Цитата:
|
Мы хотим послать сообщение командой msg не абы куда, а в консольную сессию. Для этого её нужно "увидеть" и опознать.
Для энумерации сессий (session enumeration) требуются права адм. на удалённой машине. Так это отрабатывало у меня. Это что касается прав. Вот на этом я и остановился, так как выдавать такие права всем подряд не собирался. Проверять параллельность запуска cmd при этом уже было неинтересно .) По доступности консольных сессий так: не все сотрудники присутствуют у компьютера. - кто-то залокал машину и ушёл, он сообщения не увидит. Кто-то не логонился вообще; - кто-то проигнорирует очередное выскочившее окно или именно в этот момент нажмёт пробел - всё, окна нет; - иногда сообщение почему-то не появляется впереди других окон, остаётся позади; - в целом, сообщения (например, смс) от явного вызова (например, звонка) отличаются тем, что на них можно реагировать в отложенном режиме. Подсчитав процент успешно получивших, понявших и отреагировавших на сообщение людей, контора решила экстренные уведомления таки продолжать рассылать звонками. |
Время: 01:30. |
Время: 01:30.
© OSzone.net 2001-