Заметки · 26.01.2024

А у Вас флаер есть?

Очередной пост про RDP. На этот раз про подключение определённого пользователя к удалённому рабочему столу на определённом хосте. В прилично настроенных политиках обычные пользователи лишены привилегий удалённых рабочих столов и этот функционал должен указываться явно. Само собой, если попытаться подключиться туда куда не надо тому кому не следует — вылезет всем известная ошибка:

Чтобы не множить группы в домене и уж тем более не давать право всем подряд «шастать» по всем доступным удалённым рабочим столам — предлагаю действовать адресно. К примеру, разрешить доступ к хосту только определённому пользователю, добавив юзера в локальную группу доступа на нужном компьютере.

Конечно, тащиться через удалённый рабочий стол самому и добавлять пользователя вручную не вежливо — можно потревожить текущую пользовательскую сессию. Лучше всё делать тихо и незаметно.

Для этих целей я использую вот такую функцию:

function AddRDPUser
{
    Param(
         [Parameter(Mandatory=$true)]
         [ValidateNotNullOrEmpty()]
         $ComputerName,
         [Parameter(Mandatory=$true)]
         [ValidateSet("Пользователи удаленного рабочего стола", "Remote Desktop Users")]
         [ValidateNotNullOrEmpty()]
         $GroupName,
         [Parameter(Mandatory=$true)]
         [ValidateNotNullOrEmpty()]
         $UserName
         )

    try
    {
        Set-Service -ComputerName $ComputerName -Name WinRM -Status Running -PassThru | Out-Null
        Invoke-Command -ComputerName $ComputerName -ErrorAction Stop -ScriptBlock { Add-LocalGroupMember -Group $args[0] -Member $args[1] -ErrorAction Stop } -ArgumentList $GroupName, $UserName
        return "Done!"
    }
    catch { return "Connection refused or something went wrong!" }
}

Вызвать функцию можно страндартно:

AddRDPUser -ComputerName TESTPC -UserName domain\user -GroupName 'Пользователи удаленного рабочего стола'

Если пользователь доменный — в параметре UserName применяем конструкцию domain\user, остальные параметры, думаю, вполне понятны. Кстати, в атрибут GroupName я добавил две подсказки: наименование целевой группы на русском и английском языках.

Из этой функции можно создать модуль и установить в систему для спокойной работы прямо из консоли. Подробнее об этом можно почитать здесь.