Как включить RDP в Powershell на удаленном компьютере


30 августа 2019


Как включить RDP в Powershell на удаленном компьютере

Для включения RDP в Powershell нет готовых команд, но мы можем включить эту возможность помощью редактирование параметров реестра. 

Свойства, которые мы будем редактировать выделены на скриншоте ниже:

RDP Powershell

Если вы хотите включить терминальные сеанс RDP на компьютере на котором в данный момент работаете нужно сделать следующее:

Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server' -name "fDenyTSConnections" -Value 0

Конечно консоль должна быть запущена от имени администратора либо под ним вы должны быть залогинены. Если вы измените значение на Value на 1, то мы отключим возможность RDP подключения.

Powershell RDP включение

Если мы хотим снять галку с "Allow connections only from computers running Remote Desktop with Network Level Authentication" подойдет следующий командлет:

Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -name UserAuthentication -Value 0

Возможно вы захотите сделать эту процедуру удаленно. Этот вопрос уже рассматривался в статье как выполнять команды Powershell удаленно и если вы столкнетесь с ошибками, то я бы советовал ее прочитать.

Рассмотрим пример удаленного выполнения команды в условиях где оба компьютера участники AD. Для этого нам нужно использовать имена компьютеров, а не IP. Если вы будете использовать IP, то смените проверку подлинности с Kerberos на NTLM и это потребует других настроек. 

Для удаленного включения RDP в Powershell потребуется такая последовательность команд:

# Включения сервиса удаленного подключения в Powershell
Enable-PSRemoting
# Имена одного или нескольких компьютеров, на котором будет выполнена команда
$computer_name = 'AD1','AD2'
# Выполнение удаленной команды в сессии
Invoke-Command -ComputerName $computer_name -ScriptBlock {Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server'-name "fDenyTSConnections" -Value 0}

В моем случае я выполнял команду от имени администратора обоих компьютеров, поэтому мне не нужно было вводить учетные данные. Если вы хотите выполнить команду от другого пользователя добавьте ключ со значением -Credential (Get-Credential) после переменной $computer_name, у вас запросят учетные данные.

После этого вам может понадобиться включить правило на фаерволе:

Enable-NetFirewallRule -DisplayGroup 'Remote Desktop'

Если этого правила нет, можно создать:

# Powershell
New-NetFirewallRule -DisplayName 'allow RemoteDesktop' -Profile @('Domain', 'Private') -Direction Inbound -Action Allow -Protocol TCP -LocalPort @('3389')
# или netsh
netsh advfirewall firewall add rule name="allow RemoteDesktop" dir=in protocol=TCP localport=3389 action=allow

Ну и проверим, что порт открыт и работает:

Test-NetConnection -ComputerName 'AD1' -CommonTCPPort rdp

Включение Powershell RDP удаленно

Если пользователь не принадлежит к группе Администраторов компьютера, то может понадобиться его добавить в соответствующую группу:

Add-LocalGroupMember -Group "Remote Desktop Users" -Member 'Misha'

 

Включение RDP в Powershell используя WMI

Так как мы можем работать с объектами WMI в Powershell, то можем включить настройки и таким способом. Если так мы можем увидеть состояние настройки на удаленном компьютере:

# Имя компьютера
$computer_name = 'AD1'
# Настройка powershell rdp sessions
Get-WmiObject -Class Win32_TerminalServiceSetting -Namespace root\CIMV2\TerminalServices -Computer $computer_name -Authentication 6

Powershell RDP WMI

То таким образом включим:

# Имя компьютера
$computer_name = 'AD1'
(Get-WmiObject -Class Win32_TerminalServiceSetting -Namespace root\CIMV2\TerminalServices -Computer $computer_name -Authentication 6).SetAllowTSConnections(1,1)

Так как WMI использует другие порты, может потребоваться дополнительная настройка из статьи выше.

...

Теги: #powershell


Популярные тэги
О блоге
Этот блог представляет собой конспекты выученного материала, преобретенного опыта и лучшие практики в системном администрировании и программировании.