CHGLOGON — команда CMD для управления разрешением новых пользовательских сеансов на сервере терминалов Windows (Remote Desktop Services). Это точный аналог CHANGE LOGON: обе команды принимают одинаковые ключи и дают одинаковый результат. Используется администраторами для подготовки сервера к обслуживанию без обрыва активных соединений.
- Синтаксис команды CHGLOGON
- Ключи и параметры
- Примеры использования
- Проверка состояния входа перед обслуживанием
- Плавное отключение перед обновлением
- Жёсткое отключение новых входов
- Блокировка входов до перезагрузки после патчей
- Восстановление доступа после обслуживания
- Автоматизация через bat-скрипт технического обслуживания
- Частые ошибки и решения
- Когда применять, а когда нет
- FAQ
- В чём разница между CHGLOGON и CHANGE LOGON?
- Прервёт ли /DISABLE текущие сеансы пользователей?
- Что произойдёт, если выполнить /DRAINUNTILRESTART и не перезагрузить сервер?
- Как узнать, кто сейчас подключён, перед выполнением /DRAIN?
- Можно ли применить CHGLOGON к конкретному пользователю, а не ко всем?
- Нужно ли уведомлять пользователей перед /DISABLE?
Синтаксис команды CHGLOGON
CHGLOGON /QUERY CHGLOGON /ENABLE CHGLOGON /DISABLE CHGLOGON /DRAIN CHGLOGON /DRAINUNTILRESTART
Команда всегда требует одного из ключей — запуск без параметров выведет справку. Выполняется только с правами администратора.
Ключи и параметры
| Ключ | Описание | Пример |
|---|---|---|
| /QUERY | Выводит текущее состояние: разрешён ли вход в новые сеансы | CHGLOGON /QUERY |
| /ENABLE | Разрешает новые сеансы для всех пользователей | CHGLOGON /ENABLE |
| /DISABLE | Немедленно запрещает новые сеансы (текущие не завершаются) | CHGLOGON /DISABLE |
| /DRAIN | Запрещает новые сеансы и ждёт завершения всех текущих | CHGLOGON /DRAIN |
| /DRAINUNTILRESTART | Запрещает новые сеансы до следующей перезагрузки сервера | CHGLOGON /DRAINUNTILRESTART |
Примеры использования
Проверка состояния входа перед обслуживанием
Перед любым действием стоит убедиться в текущем статусе сервера.
CHGLOGON /QUERY
Команда выведет одну из строк: Session logins are currently enabled или Session logins are currently disabled. Также покажет режим DRAIN, если он активен.
Плавное отключение перед обновлением
Нужно установить обновления, не обрывая работу текущих пользователей.
CHGLOGON /DRAIN
Новые подключения блокируются немедленно, а существующие сеансы продолжают работу. Сервер готов к перезагрузке, как только последний пользователь выйдет сам.
Жёсткое отключение новых входов
Требуется срочно закрыть доступ, например при обнаружении инцидента безопасности.
CHGLOGON /DISABLE
Все попытки создать новый сеанс будут отклонены немедленно. Активные сеансы продолжат работу.
Блокировка входов до перезагрузки после патчей
Патч применён, сервер нужно перезапустить, но хочется дождаться конца рабочего дня.
CHGLOGON /DRAINUNTILRESTART
После перезагрузки сервер автоматически вернётся в нормальный режим — вручную включать вход не потребуется.
Восстановление доступа после обслуживания
Обслуживание завершено, нужно открыть сервер для пользователей.
CHGLOGON /ENABLE
Новые сеансы снова разрешены. Рекомендуется сразу проверить статус через CHGLOGON /QUERY.
Автоматизация через bat-скрипт технического обслуживания
Скрипт закрывает вход, ждёт завершения задач и снова открывает доступ.
@echo off CHGLOGON /DRAIN echo Ожидание завершения пользовательских сеансов... rem ... выполнение задач обслуживания ... CHGLOGON /ENABLE CHGLOGON /QUERY
Скрипт последовательно переводит сервер в режим DRAIN, выполняет нужные операции и возвращает нормальный режим работы.
Частые ошибки и решения
| Ошибка | Причина | Решение |
|---|---|---|
| «Отказано в доступе» при выполнении | CMD запущена без прав администратора | Запустить CMD от имени администратора |
| «CHGLOGON не является внутренней или внешней командой» | Служба Remote Desktop Services не установлена | Установить роль RDS через диспетчер сервера или проверить наличие chglogon.exe в System32 |
| /QUERY показывает ENABLED, но пользователи не могут подключиться | Блокировка может быть на уровне брандмауэра или лицензий RDS | Проверить правила брандмауэра для порта 3389 и состояние лицензирования RDS |
| После /DRAIN сеансы «зависли» и не завершаются | Пользователи оставили открытые несохранённые документы или зависшие процессы | Выполнить QWINSTA для просмотра сеансов и LOGOFF <ID сеанса> для принудительного завершения |
| /DISABLE применён, а пользователи всё равно подключаются | Подключение идёт не через стандартный RDP, а через другой механизм (например, теневую копию сеанса) | Уточнить метод подключения пользователей; при необходимости заблокировать на уровне брандмауэра |
Когда применять, а когда нет
CHGLOGON работает только на серверах с установленной ролью Remote Desktop Services (Windows Server). На рабочей станции Windows 10/11 с включённой функцией удалённого рабочего стола команда может присутствовать, но управление сеансами через неё ограничено. Команда требует прав локального администратора. В PowerShell частичным аналогом служит командлет Disable-RDSessionHost из модуля RemoteDesktop, однако он требует дополнительной настройки коллекций RDS. Для разовых операций CHGLOGON быстрее и проще.
FAQ
В чём разница между CHGLOGON и CHANGE LOGON?
Никакой функциональной разницы нет. CHGLOGON — это сокращённый псевдоним CHANGE LOGON. Обе команды вызывают один и тот же исполняемый файл и принимают одинаковые параметры. Используйте ту, которая удобнее для ввода.
Прервёт ли /DISABLE текущие сеансы пользователей?
Нет. /DISABLE только блокирует создание новых сеансов. Уже подключённые пользователи продолжат работу в своих сеансах без каких-либо прерываний.
Что произойдёт, если выполнить /DRAINUNTILRESTART и не перезагрузить сервер?
Сервер будет оставаться в режиме запрета новых входов бессрочно до первой перезагрузки. Чтобы вернуть доступ без перезагрузки, выполните CHGLOGON /ENABLE.
Как узнать, кто сейчас подключён, перед выполнением /DRAIN?
Выполните QWINSTA или QUERY SESSION — оба показывают список активных и отключённых сеансов с именами пользователей и ID сеансов.
Можно ли применить CHGLOGON к конкретному пользователю, а не ко всем?
Нет. CHGLOGON управляет только глобальным режимом входа для всего сервера целиком. Для ограничения доступа конкретного пользователя используйте групповые политики или права учётной записи.
Нужно ли уведомлять пользователей перед /DISABLE?
Хорошей практикой является отправка предупреждения через MSG * "Сервер будет недоступен через 15 минут" перед блокировкой входа. Это даёт пользователям время сохранить работу.


