В Windows Server 2016 в консоли Server Manager в разделе управления настройками ролей Remote Desktop Services при выборе определённой Коллекции нам доступно окно управления клиентскими подключениями к серверам нашей фермы 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 получат всплывающее сообщение которое трудно не заметить…
Пример скрипта скачать Сообщение всем пользователям
Запуск 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
Создайте подраздел с именем runas и перейдите в него
Внутри раздела runas создайте пустой строковый параметр (String Value) с именем HasLUAShield (этот параметр добавит иконку UAC в контекстное меню проводника)
В разделе runas создайте вложенный подраздел command
В качестве значения параметра Default раздела command укажите значение:
[code]powershell.exe «-Command» «if((Get-ExecutionPolicy ) -ne ‘AllSigned’) { Set-ExecutionPolicy -Scope Process Bypass }; & ‘%1′»[/code]
Теперь, если щелкнуть ПКМ по любому *.PS1 файлу, в контекстном меню можно выбрать пункт Run as administrator
Совет. Если скрипт отрабатывает быстро, пользователь успевает только увидеть появившееся и быстро исчезнувшее окно 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.ru, http://winitpro.ru