Помилка RDP Неможливо завершити необхідну операцію, служби віддалених робочих столів зайняті

Періодично деякі користувачі не можуть залогінитися на сервера RDS ферми Windows Server через стандартний rdp клієнт з помилкою:

Неможливо завершити необхідну операцію, оскільки служби віддалених робочих столів зараз зайняті. Повторіть спробу за кілька хвилин. Інші користувачі повинні як і раніше мати можливість входу.

The task you are trying to do can not be completed because Remote Desktop Services is currently busy. Please try again in a few minutes. Other users should still be able to log on.

Також кілька разів зустрічали таку картину: на вкладці Users диспетчера задач RDS хоста є безліч завислих сесією користувачів з іменами (4) замість username і зі статусом Disconnected.

Проблема зустрічається на всіх версіях Windows Server: 2008 R2, 2012 R2, 2016 і 2019.

Помилка може виникати з різних причин:

  • Помилка в роботі служби віддалених робочих столів;
  • Баг з процесом csrss.exe;
  • Проблема з профілем користувача або зі службою profsvc;
  • Брак оперативної пам'яті або дискового простору на RDSH сервері;
  • Некоректні настройки групових політик.

На жаль, на даний момент немає офіційного рішення від Microsoft, яке б повністю вирішувало проблему, все зводиться до усунення симптомів.

Практично завжди проблема вирішується скиданням сесії проблемного користувача і перезавантаженням RDS сервера, але у виняткових ситуаціях цього може не вистачити. Пройдемося за рішеннями, починаючи від найлегших.

# 1 - Перевірте ресурси RDS сервера

Переконайтеся, що сервера вистачає ресурсів, так як ця помилка може виникати через брак оперативної пам'яті або дискового простору. Перевірте завантаженість оперативної пам'яті і чи достатньо вільного місця на диску, де встановлена ​​операційна система (повинно бути вільно хоча б 1 GB). Також перевірте event log на предмет критичних помилок, пов'язаних з RDS.

Якщо ресурсів вистачає, переходимо до наступного варіанта.

# 2 - Скидання сесії користувача і завершення завислих процесів в RDS сесії

Спочатку спробуємо знайти і примусово скинути сесію користувача, який не може зайти на RDS сервер. У диспетчері завдань, на вкладці Users знайдіть потрібного користувача і через контекстне меню натискаємо "Log off". У більшості випадків, цього достатньо, але іноді в диспетчері завдань ви можете виявити безліч завислих сесій з ім'ям "(4)" замість імені користувача. Як правило в зависла сесії буде присутній 4 процесу:

  • Client Server Runtime Process (csrss.exe)
  • Desktop Windows Manager (dwm.exe)
  • Windows Logon Application (winlogon.exe)
  • Windows Logon User Interface

В першу чергу спробуйте завершити всі завислі сесії з (4) через диспетчер задач, як описано вище. Якщо це не допоможе, то найкраще перезавантажити сервер, але найчастіше такої можливості немає, тому пробуємо вирішити проблему без перезавантаження:

  1. Запустіть командний рядок з правами адміністратора і введіть: query session
    Вона покаже всіх користувачів і їх сесії на термінальному сервері. У висновку команди є 3 цікавлять нас стовпці: SESSIONNAME, USERNAME і ID. Знайдіть користувача (4) і відповідний йому ID, в даному прикладі ID 2. Нам потрібно завершити процес csrss.exe який працює під цією сесією, спочатку знайдемо його.
  2. У командному рядку введіть: query process / id 2
    Команда виведе всі процеси, які запущені в цій сесії. Нам потрібно знайти процес csrss.exe і відповідний йому PID. У моєму випадку PID буде 5140. Нам потрібно завершити цей процес.
  3. Звіримося по диспетчеру задач. Відкрийте диспетчер задач, перейдіть на вкладку Details і знайдіть потрібний вам PID і процес.Якщо потрібний вам PID відповідає процесу csrss.exe, то завершите процес через контекстне меню і End task, або через командний рядок: taskkill / F / PID 5140

Це потрібно зробити з кожним користувачем "(4)", якщо їх декілька.

# 3 - Скидання сесії користувача через командний рядок

Якщо разлогініть "проблемного" користувача через диспетчер задач не вдалося, можна спробувати скинути сесію користувача через командний рядок.

    1. Запустіть командний рядок з правами адміністратора і введіть query session

      Скопіюйте SESSIONNAME проблемного користувача.

    2. Введіть reset session . Замість впишіть потрібне вам назву сесії, як показано на скріншоті

Це потрібно зробити з кожним проблемним користувачем. Тепер можете спробувати залогінитись, проблема повинна зважитися. Якщо у вас є можливість перезавантажити сервер, то краще зробити це.

# 4 - Перевірте настройки ліцензування хоста RDS

Перевірте, що у вас на RDSH хості вказана правильна сервер ліцензування і тип ліцензії (CAL Per User / CAL Per Device).

У мене помилка "Неможливо завершити необхідну операцію, оскільки служби віддалених робочих столів зараз зайняті" один раз була, коли після установки ролі RDSH я забув вказати адресу сервера з роллю Remote Desktop Licensing. У цьому випадку два користувача підключалися нормально, а третій отримував помилку.

Адреса сервера з ліцензіями RDS можна вказати:

      • В налаштуваннях RDS колекції: Tasks -> Edit Deployment Properties -> RD Licensing;
      • через GPO: Use the specified Remote Desktop license servers (Computer Configuration -> Policies -> Admin Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host -> Licensing)
      • За допомогою PowerShell (Див. Статтю "Чи не заданий режим ліцензування для сервера вузла сеансів віддалених робочих столів").

# 5 - Приберіть ліміт RDP підключень в GPO

Через групові політики можна обмежити кількість одночасних підключень по RDS. За замовчуванням ця політика вимкнена.

З помошью gpresult потрібно перевірити, чи політика і яке в ній вказано значення.

      1. Запустіть командний рядок з правами адміністратора і введіть gpresult / H c: \ gpresult.html
      2. Відкрийте файл gpresult.html, який лежить в корені диска C. Це звичайний .html файл, рекомендується відкривати через internet explorer, так як в інших браузерах він може відображатися некоректно;
      3. В розділі Computer Configuration -> Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host \ Connections знайдіть Limit number of connections, або в пошуку по сторінці наберіть Limit number of connections.

Якщо такої політики немає, значить вона не застосовується і обмежень по кількості одночасних підключень немає. Якщо політика є і вказано кількість одночасних підключень, змініть її значення на потрібне вам число. Змінити групову політику можна через оснащення gpedit.msc, якщо політика налаштована через доменні GPO, відредагуйте відповідну політику через gpmc.msc. Після того як відредагуєте політику, не забудьте набрати в командному рядку gpupdate / force для негайного застосування політики.

# 6 - Нестандартні рішення: якщо нічого не допомагає

Якщо ресурсів у вас вистачає, помилок в журналі немає, перезавантажуватися не можна, а скидання сесії з якихось причин не допоміг, то слід спробувати наступні варіанти:

    • Перевірте, що на RDS сервері не включено Drain режим, який забороняє користувачам нові RDP підключення: chglogon.exe / QUERY . Якщо команда поверне повідомлення "New user logons are DISABLED, but reconnections to existing sessions are ENABLED", Вимкніть Drain режим: chglogon.exe / enable
    • В налаштуваннях RDP підключення (mstsc.exe) на клієнті mstsc зніміть галку «Постійне кешування точкових малюнків» ( «Persistent bitmap caching»);
    • Перезавантажте службу RDS. У командному рядку з правами адміністратора наберіть net stop termservice і net start termservice. Або перезапустіть службу віддалено за допомогою PowerShell: Get-Service termservice -ComputerName msk-rds1 | Restart-Service
    • Примусово убийте процеси tstheme.exe;
    • Рекомендується застосувати всі останні оновлення для вашої версії Windows, скористайтеся стандартними засобами оновлення.