Как отключить Windows Remote-Desktop с помощью Powershell?
Все наши тестовые ящики работают на виртуальных машинах (windows server 2003/08), и тестировщики получают к ним доступ только через удаленный рабочий стол.
Некоторые шаги по обслуживанию требуют выгнать всех пользователей из системы и отключить доступ через удаленный рабочий стол.
Я начал писать сценарии обслуживания в powershell и ищу способ временно отключить удаленный рабочий стол. Возможно ли это, какие-либо прямые решения для этого?
То, что я пробовал до сих пор:
- коллега рекомендуется отключить netlogon-сервис, но я могу все еще вход с удаленного рабочего стола.
- другой коллега рекомендовал отключить блокировку порта для
remote-рабочий стол с брандмауэром, но как-то это не чувствуется
прямо ко мне (?) потому что я не хочу менять одну часть системы. воздействовать на другую часть. Я слишком разборчив ... ? ;)
Любые намеки высоко ценятся.
Ура!, Тоби
4 ответа:
Вам нужно установить
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\fDenyTSConnections
Значение 1 по умолчанию для отключения удаленного рабочего стола, но требуется перезагрузка.
Еще один способ, который, кажется, не нуждается в перезагрузке (не протестирован):
$ts=get-WMIObject Win32_TerminalServiceSetting -computername remotemachinename $ts.SetAllowTSConnections(0)
Теперь я нашел решение, которое идеально подходит для меня. Windows Server 2008 поставляется с функцией под названием "режим слива сервера служб терминалов "
... режим слива сервера TS предотвращает вход новых пользователей на сервер, позволяя пользователям, вошедшим в систему в данный момент, повторно подключиться к существующим сеансам. Ожидая, пока существующие пользователи сохранят свою работу и выйдут из системы, администратор может отключить сервер терминалов для обслуживания, не вызывая данных пользователя. потеря.
Прежде чем активировать режим слива, я удостоверяюсь, что никто не вошел в систему, а затем активирую режим слива следующим кодом:
Invoke-Command -ComputerName myServerHostName -ScriptBlock { Set-ItemProperty -Path "HKLM:\SYSTEM\Currentcontrolset\control\Terminal Server" -Name TSServerDrainMode -Value 1 }
Хотя я изменяю раздел реестра, мне не требуется перезагружать сервер, чтобы изменения вступили в силу. Это работает без перезагрузки.
Когда я закончу выполнение работ по техническому обслуживанию, я отключу режим слива с "- значением 0", и пользователи смогут снова войти в систему.
Работает как заклинание!
Мой первоначальный ответ был:
Мое усовершенствованное решение, которое я нашел через обширный веб-поиск, выглядит следующим образом (также непроверенное):$Terminal = Get-WmiObject Win32_Terminal –Computer “ComputerName” $Terminal.Enable($True)
Другие возможные и интересные фрагменты кода или вариации на эту тему, которые я нашел:
$myWmiObject = Get-WmiObject -namespace “rootCIMV2TerminalServices” -class Win32_Terminal -Computer “ComputerName” -Authentication PacketPrivacy
Или
Set-WmiInstance -namespace “rootCIMV2TerminalServices” -class Win32_Terminal -ComputerName “ComputerName” -Authentication PacketPrivacy -Argument @{fEnableTerminal=0}
Или
Get-WmiObject -ComputerName “ComputerName” -namespace root/cimv2/terminalservices -class Win32_Terminal -Authentication PacketPrivacy
В поисках чего-то еще сегодня утром (по совпадению) я увидел следующее: "Проверка и включение удаленного рабочего стола с помощью PowerShell".
Резюме: включает в себя манипуляции с реестром.
Я часто использую этот код gWmi:
#Remote change logon /disable $TS_Connector = gwmi Win32_TerminalServiceSetting -N "root/cimv2/terminalservices" -computername $ServerName -Authentication PacketPrivacy $TS_Connector.Logons=1 $TS_Connector.Put()
И для включения входов
#Remote change logon /enable $TS_Connector = gwmi Win32_TerminalServiceSetting -N "root/cimv2/terminalservices" -computername $ServerName -Authentication PacketPrivacy $TS_Connector.Logons=0 $TS_Connector.Put()
Вместо Invoke-command (), потому что nead RCP openned, и RPC connexion отключены по умолчанию в windows