Как отправить сообщение всем терминальным пользователям Server 2016 RDS

Как отправить сообщение всем терминальным пользователям Server 2016 RDS

 

 

В Windows Server 2016 в консоли Server Manager в разделе управления настройками ролей Remote Desktop Services при выборе определённой Коллекции нам доступно окно управления клиентскими подключениями к серверам нашей фермы RDS, однако по какой-то странной причине разработчики этой самой консоли посчитали что функцию выбора более одного пользователя для отправки сообщения реализовывать не нужно, …наверно чтобы администраторам жизнь мёдом не казалась..

Как отправить сообщение всем терминальным пользователям Server 2016 RDS

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

[idea]

# $ConnectionBroker — Активный сервер RDCB. Если не указан, будет произведена попытка выявить его автоматически (для этого обязательно чтобы скрипт выполнялся на одном из серверов фермы RDS)

# $SessionHostCollection – Имя RD-коллекции в которой нужно вывести сообщение.

#

$ConnectionBroker = «»

$SessionHostCollection = «KOM-AD01-RDCOLL»

$MessageTitle = «Сообщение от тех.поддержки SAP»

$MessageText = «Уважаемые коллеги!

В связи с проведением работ по расчету зарплаты —

просьба в программе SAP Персонал с 11:00 до конца дня

с табельными номерами не работать!»

If ($ConnectionBroker -eq «») {

$HAFarm = Get-RDConnectionBrokerHighAvailability

$ConnectionBroker = $HAFarm.ActiveManagementServer

}

$Sessions = Get-RDUserSession -ConnectionBroker $ConnectionBroker -CollectionName $SessionHostCollection

ForEach ($Session in $Sessions) {

Send-RDUserMessage -HostServer $Session.ServerName -UnifiedSessionID $Session.UnifiedSessionID -MessageTitle $MessageTitle -MessageBody $MessageText

}

[/idea]

В результате все активные пользователи на всех серверах фермы RDS получат всплывающее сообщение которое трудно не заметить… image

 

 

Пример скрипта скачать Сообщение всем пользователям

Запуск PowerShell скрипта из проводника с правами администратора

В Windows скрипты PowerShell (расширение .PS1) по умолчанию не ассоциированы с исполнимым файлом PowerShell.exe. При двойном щелке по файлу сценария PS1 открывается окно тестового редактора notepad.exe. Запустить файл PS1 на выполнение в среде PowerShell можно из контекстного меню проводника, выбрав пункт Run With PowerShell. Однако такой сценарий запускается в рамках сессии пользователя, без прав администратора. Хотя для тех же файлов скриптов .bat, .cmd, имеется отдельный пункт меню Run As administrator. В случае с PowerShell приходится открывать консоль Power Shell с повышенными правами и указывать полный путь к файлу скрипта. Не очень-то удобно.

Рассмотрим, как добавить в контекстное меню проводника File Explorer для файлов с расширением *.ps1, пункт, позволявший запустить скрипт PowerShell с правами администратора.

Запустите редактор реестра (regedit.exe)

Перейдите в ветку HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\shell

HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\shell

Создайте подраздел с именем runas и перейдите в него

Внутри раздела runas создайте пустой строковый параметр (String Value) с именем HasLUAShield (этот параметр добавит иконку UAC в контекстное меню проводника)

В разделе runas создайте вложенный подраздел command

HasLUAShield

В качестве значения параметра Default раздела command укажите значение:

[code]powershell.exe «-Command» «if((Get-ExecutionPolicy ) -ne ‘AllSigned’) { Set-ExecutionPolicy -Scope Process Bypass }; & ‘%1′»[/code]

powershell.exe Command

Теперь, если щелкнуть ПКМ по любому *.PS1 файлу, в контекстном меню можно выбрать пункт Run as administrator

PowerShell скрипт ps1 - RunAsAdministrator

Совет. Если скрипт отрабатывает быстро, пользователь успевает только увидеть появившееся и быстро исчезнувшее окно PowerShell. А что делать, если результат выполнения скрипта должен остаться на экране для просмотра пользователем?

Чтобы после окончания работы скрипта, окно консоли PowerShell не закрывалось, необходимо добавить в строку параметр –NoExit:

[code]powershell.exe –NoExit «-Command» «if((Get-ExecutionPolicy ) -ne ‘AllSigned’) { Set-ExecutionPolicy -Scope Process Bypass }; & ‘%1′»[/code]

Готовый reg файл скачать: ps1-ot-administratora

 

Источники: https://blog.it-kb.ruhttp://winitpro.ru