Для включения RDP в Powershell нет готовых команд, но мы можем включить эту возможность помощью редактирование параметров реестра.
Свойства, которые мы будем редактировать выделены на скриншоте ниже:
Если вы хотите включить терминальные сеанс RDP на компьютере на котором в данный момент работаете нужно сделать следующее:
Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server' -name "fDenyTSConnections" -Value 0
Конечно консоль должна быть запущена от имени администратора либо под ним вы должны быть залогинены. Если вы измените значение на Value на 1, то мы отключим возможность 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
Если пользователь не принадлежит к группе Администраторов компьютера, то может понадобиться его добавить в соответствующую группу:
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
То таким образом включим:
# Имя компьютера
$computer_name = 'AD1'
(Get-WmiObject -Class Win32_TerminalServiceSetting -Namespace root\CIMV2\TerminalServices -Computer $computer_name -Authentication 6).SetAllowTSConnections(1,1)
Так как WMI использует другие порты, может потребоваться дополнительная настройка из статьи выше.
...
Подписывайтесь на наш Telegram канал
Теги: #powershell