Обновлено 16.04.2019
Добрый день! Уважаемые читатели и гости IT портала Pyatilistnik.org. Вчера я вас научил определять номер и ID сеанса пользователя на RDS ферме или терминальном сервере. Там я вам рассказывал, что это нужно в случаях, когда вам необходимо завершить сессию пользователя, по ряду причин, одна из таких, это просто ее зависание. После чего человек и подключиться не может заново и не может выйти из своего сеанса. Вы как администратор, должны уметь решать проблему с зависшими RDP сессиями, ниже я покажу свои методы и алгоритмы.
Описание проблемы
Есть RDS ферма из 15 хостов подключений на Windows Server 2012 R2. Сервера на то они и сервера, что работают постоянно. Если у вас на ферме не настроены тайм ауты времени беспрерывной работы, то пользователи могут неделями или месяцами висеть в авторизованных подключениях. Логично предположить, что это не очень хорошо и ведет к различным последствиям, одно из которых, это полное зависание сеанса, при котором человек не может подключиться к терминальному серверу и видит сообщение «Работает служба профилей пользователей» или еще вариант «Не удается завершить требуемую операцию», я уже не говорю про повреждение пользовательского профиля. В результате того, что RDS брокеры видят. что пользователь уже залогинен, они не дают ему переподключиться к другому Session Host серверу, даже если вы закроете на текущем новые подключения. Пока вы не сделаете выход пользователя из системы для этой сессии, она так и будет мешать. Давайте разбираться, как это делать.
Методы завершения сессии пользователя не терминале
Существует несколько методов позволяющие выкинуть пользователя с сервера.
- Завершить сессию пользователя (Сделать log off) вы можете из оснастки управления RDS фермой
- Разлогинить пользователя можно и на самом терминальном сервере из диспетчера задач
- Выход пользователя можно выполнить из утилиты командной строки rwinsta
- Утилита командной строки log off
- Утилита reset session
- * Командлет Stop-TSSession
Как выкинуть пользователя из оснастки управления RDS
И так, у меня есть мой любимый, тестовый пользователь в Active Directory, по имени Барбоскин Геннадий Викторович. Предположим, что он зашел на терминальный стол и нам по причине зависания его сессии, нужно сделать ему выход. Первый метод, это использование оснастки по управлению RDS фермой, я вам рассказывал, как ее собирать. Открываем раздел с вашей коллекцией RDS фермы. В поисковом фильтре указываем логин или фамилию нужного сотрудника. В результате получаем хост, где он работает.
Щелкаем по нему правым кликом. В контекстном меню будет пункт «Выйти», это и соответствует завершению сессии (Log off). Так же есть пункт «Отключиться», если выберите его, то пользователь будет выброшен с терминального сервера, но его сессия останется на нем, данная операция равносильна тому, если пользователь просто нажал в окне с названием терминального сервера крестик.
После того, как вы выбрали пункт «Выйти», начнется корректное завершение сессии пользователя на RDS ферме. Сам пользователь увидит сообщение «Работает служба профилей пользователей» и у него закроется окно без ошибки.
Второй метод разлогинить пользователя на терминальном сервере
Второй метод, похож на первый, за исключением того, что нам необходимо залогиниться на нужный сервер, открыть оснастку «Диспетчер задач» и уже из него произвести выход пользователя. Сказано сделано, о том, как вам попадать на нужного участника RDS фермы я рассказывал. Далее щелкаем правым кликом по области пуска и из контекстного меню выбираем пункт «Диспетчер задач». Кстати, вызвать «Диспетчер задач» можно и через сочетание клавиш CTRL+SHIFT+ESC.
Находим нужного нам пользователя и щелкаем по нему правым кликом, в контекстном меню. нас будет интересовать пункт «Выйти». Выбираем его и завершаем сессию пользователя.
Бывает так, что первые два метода не помогают в случаях, когда пользовательская сессия зависает на терминальном сервере, вы вроде бы из графического интерфейса делаете выход, но оно не отрабатывает. В таких случаях нужно использовать утилиты командной строки или PowerShell
Использование утилиты RWINSTA
Если вы попали в ситуацию, когда графические методы не позволяют вам произвести выход пользователя из системы, а это необходимо, то вам на помощь придут утилиты из командной строки. RWINSTA — это встроенная в Windows утилита, которая позволяет сбрасывать сессии, по ID и имени сеанса. Первым делом вам нужно вычислить или ID сессии или ее имя, я вам рассказывал, о всех известных мне методах. можете ознакомиться. Я выберу утилиту qwinsta. Пишем команду:
qwinsta | findstr barboskin.g (Локально)
или удаленно qwinsta /server:имя сервера | findstr barboskin.g
В моем примере имя сеанса rdp-tcp#172 и ее ID 515. Пишем команду:
rwinsta rdp-tcp#172 /server:localhost или rwinsta 515 /server:localhost
И в первом и во втором случае, пользователь будет разлогинен с данного сервера. Данную команду можно запускать удаленно, со своего рабочего места, главное, чтобы были права на log off. Данный метод меня ни раз выручал в моей практике, например случай с зависшей сессией на Windows Server 2016, где вместо логина пользователя было имя (4).
Как отключить пользователя через reset session
Завершить сессию пользователя можно и с помощью утилиты командной строки Reset Session. В текущем примере у моего Барбоскина Геннадия Викторовича имя сеанса rdp-tcp#16 с его ID 11. Данную утилиту можно применять как локально на самом терминальном сервере, так и на своей рабочей станции, тут так же есть ключ /server.
reset session rdp-tcp#16 или reset session 11
Подробнее про утилиту reset session вы можете почитать на сайте Microsoft — https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/reset-session
Как отключить пользователя через logoff
Разлогинить пользовательскую учетную запись и даже зависшую, можно и через утилиту командной строки «LogOff». В данном примере у Геннадия Барбоскина имя сессии rdp-tcp#43. В командной строке от имени администратора введите:
logoff rdp-tcp#43 /server:localhost (Имя сервера можно менять) или logoff 54 /server:localhost
Выход пользователя через командлет Stop-TSSession
Есть такой замечательный командлет Stop-TSSession. Посмотрим на сервере ID и имя сеанса, для этого в открытой оболочке PowerShell введите:
В итоге я вижу, что у пользователя barboskin.g SessionID 3. Далее пишем
Stop-TSSession 3 или принудительно Stop-TSSession 3 -Force
Соглашаемся с тем, что будет производиться log off для данного пользователя. Проверяем, что сессия завершена. Можно вот таким простеньким скриптом из планировщика задач, разлогинивать сессии:
Import-Module PSTerminalServices
Get-TSSession -ComputerName SERVER_NAME -filter {$_.sessionID -ne 0 -AND $_.sessionID -ne 1 -AND $_.sessionID -ne 65536}| Stop-TSSession –Force
Выход пользователя через командлет Stop-TerminalSession
Данный командлет устанавливается отдельно, совместно с пакетом Pscx. Первым делом посмотрим локально или удаленно идентификаторы сессии пользователя, для которого мы хотим сделать log off. Выполняем команду:
Get-TerminalSession -ComputerName имя сервера
Нужный мне ID сеанса 427. Далее воспользуемся командлетом Stop-TerminalSession, чтобы выкинуть пользователя и завершить его сессию.
Stop-TerminalSession -ComputerName имя сервера -Id 427 -Force
Как видите сессия 427 больше не существует, и у нас с помощью командлета Stop-TerminalSession получилось выкинуть пользователя из RDS сеанса. На этом у меня все. Остались вопросы, то пишите их в комментариях. С вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.
Случилось так, что юзер на сервере запустил Wireshark и забыл. Через несколько дней оперативка кончилась и серверу Windows Server 2012 R2 стало плохо. Попытки зайти на сервер по RDP или консоль не увенчались успехом. Удалось удалённо подключиться к управлению компьютером и в логах узнать о проблемах с оперативкой.
Стало понятно, что нужно сделать юзеру LOGOFF, чтобы все запущенные приложения завершили свою работу.
Порядок действий
Получаем идентификатор сессии искомого юзера на нашем удалённом сервере с помощью командной строки:
quser /server:my_server_name
Результат:
C:Windowssystem32>quser /server:my_server_name
USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME
v.pupkin 1 Disc 21:14 15.05.2018 11:13
Нас интересует здесь значение ID=1
Делаем юзеру LOGOFF:
logoff 1 /SERVER:my_server_name /v
Результат:
C:Windowssystem32>logoff 1 /SERVER:my_server_name /v
Logging off session ID 1
C:Windowssystem32>quser /server:my_server_name
No User exists for *
Через некоторое время память освободилась, серверу похорошело.
Завершение сеанса удаленного рабочего стола сервера RDS
Завершение сеанса пользователя на удаленном компьютере RDP
Показываем, как правильно завершать сеансы на сервере удаленного рабочего стола (Remote Desktop Services) c программой 1С Предприятие 8. Как правило, сотрудники уходя забывают завершать сеансы Windows, при этом ошибочно делая отключение сеанса RDP. При отключении сеансов и не закрытых программах оперативная память на сервере продолжает использоваться, что очень нежелательно для сервера.
Как делать завершение сеанса пользователя на удаленном компьютере?
В Windows Server 2012R2 нажимаем кнопку Пуск — справа в верхнем окне нажимаем на свой логин и кнопку Выйти. Именно таким образом делается правильно завершение сеанса при закрытии rdp. Поэтому необходимо нарабатывать в организации культуру поведения за компьютером – уходя с работы правильно делать завершение сеанса пользователя rdp. Тогда у пользователей на следующий день не будет проблем с подключением принтеров и других устройств в терминальном сеансе, так как создается абсолютно новый сеанс.
Материал любезно предоставлен компанией Smart1C.
Видео — Завершение сеанса пользователя на удаленном компьютере
Как правило, для отключения неактивных и завершения отключенных сессий на серверах сеансов служб удалённых рабочих столов Remote Desktop Session Host в Windows Server 2012 R2 администраторы используют возможности групповых политик домена Active Directory. Однако иногда может возникать потребность в управлении неактивными сеансами по хитрым правилам, которые невозможно уложить в рамки стандартных механизмов GPO или даже GPP. В таких случаях для управления сеансами можно прибегнуть к возможностям PowerShell.
В рассматриваем примере стоит задача организовать управление неактивными сеансами в ферме RD Connection Broker (RDCB) с несколькими серверами RD Session Host (RDSH) исходя из того условия, что все пользователи в ферме RDS делятся на две категории:
- Стандартные пользовали, для которых используются одинаковые правила сессионных таймаутов вне зависимости от каких-либо факторов. Правила :
- Отключение простаивающих сеансов — через 1 час
- Завершение отключённых сеансов — через 2 часа
- Пользователи со специальным режимом сессионных таймаутов, который действует только в определённые дни месяца (с 25 числа каждого месяца по 5 число каждого последующего месяца). В эти дни данная группа пользователей выполняет круглосуточные расчёты, в том числе и в отключенных сеансах, поэтому сессии не должны отключаться. В остальные дни месяца сессионные таймауты применяются по аналогии со стандартными пользователями из п.1.
Отделение пользователей со специальным режимом выполняется с помощью членства в доменной группе безопасности Active Directory.
Пример реализации в виде PS-скрипта RDS-Logoff-Inactive.ps1:
# Требования к модулям PS: ActiveDirectory, RemoteDesktop
#
# Члены специальной группы $SpecialGroup не затрагиваются при отключении
# простаивающих и завершении отключенных сессий в дни месяца из $SpecialDays
# Блок переменных
# $SpecialDays - Дни месяца, в которые члены группы $SpecialGroup не отключаются
# $MaxConnectedInactiveTime - Время простоя в подключенном состоянии, затем отключение сессии (мс)
# $MaxDisconnectedTime - Время простоя с момента отключения сессии (мс)
#
$ConnectionBroker = ""
$SessionHostCollection = "RDCollection1"
$SpecialGroup = "RDS-Extended-Session-Users"
$SpecialDays = @(01,02,03,04,05,25,26,27,28,29,30,31)
$MaxConnectedInactiveTime = 3600000 # 1 час
$MaxDisconnectedTime = 7200000 # 2 часа
$LogFilePath = $($script:MyInvocation.MyCommand.Path).Replace('.ps1','.log')
# Функция загрузки модуля PowerShell
#
Function Load-Module ($MName)
{
$retVal = $true
If (!(Get-Module -Name $MName))
{
$retVal = Get-Module -ListAvailable | Where { $_.Name -eq $MName }
If ($retVal)
{
Try { Import-Module $MName -ErrorAction SilentlyContinue }
Catch { $retVal = $false }
} Else {
Write-Host $MName "Module does not exist. Please check that the module is installed."
}
}
Return $retVal
}
# Функция записи в лог-файл
#
Function WriteLog ($Text)
{
$TimeStamp = (Get-Date).ToString("dd.MM.yyyy HH:mm:ss")
Write-Host $Text
Add-Content $LogFilePath "$($TimeStamp)`t $Text"
}
# Загрузка модулей PowerShell
#
If (!(Load-Module "ActiveDirectory")) {return}
If (!(Load-Module "RemoteDesktop")) {return}
$GroupMembers = Get-ADGroupMember -Identity $SpecialGroup -Recursive
$ToDayIsSpecial = $SpecialDays -contains $(Get-Date -Format dd)
If ($ConnectionBroker -eq "") {
$HAFarm = Get-RDConnectionBrokerHighAvailability
$ConnectionBroker = $HAFarm.ActiveManagementServer
}
$Sessions = Get-RDUserSession -ConnectionBroker $ConnectionBroker -CollectionName $SessionHostCollection
ForEach ($Session in $Sessions) {
# Пропускаем пользователей из специальной группы в специальные дни
#
If ($ToDayIsSpecial -eq $true -and $GroupMembers.SamAccountName -contains $Session.UserName){Continue}
# Пропускаем активные сессии
#
If ($Session.SessionState -eq "STATE_ACTIVE"){Continue}
# Отключаем простаивающие сессии
#
If ($Session.SessionState -eq "STATE_CONNECTED" -and $Session.IdleTime -ge $MaxConnectedInactiveTime) {
Try {
WriteLog "Disconnect RD User: $($Session.UserName) `t Server: $($Session.HostServer) `t Session disconnect time: $($Session.DisconnectTime.ToString("dd.MM.yyyy HH:mm:ss")) `t Idle time: $([TimeSpan]::FromMilliseconds($Session.IdleTime).ToString())"
Disconnect-RDUser -HostServer $Session.HostServer -UnifiedSessionID $Session.UnifiedSessionId -Force -ErrorAction Stop
} Catch {
WriteLog "ERROR! Can't disconnect RD User: $($Session.UserName) `t Server: $($Session.HostServer) `n $($_)"
}
Continue
}
# Завершаем отключенные сессии
#
If ($Session.SessionState -eq "STATE_DISCONNECTED" -and $Session.IdleTime -ge $MaxDisconnectedTime) {
Try {
WriteLog "Logoff RD User: $($Session.UserName) `t Server: $($Session.HostServer) `t Session disconnect time: $($Session.DisconnectTime.ToString("dd.MM.yyyy HH:mm:ss")) `t Idle time: $([TimeSpan]::FromMilliseconds($Session.IdleTime).ToString())"
Invoke-RDUserLogoff -HostServer $Session.HostServer -UnifiedSessionID $Session.UnifiedSessionId -Force -ErrorAction Stop
} Catch {
WriteLog "ERROR! Can't logoff RD User: $($Session.UserName) `t Server: $($Session.HostServer) `n $($_)"
}
}
}
Скрипт не имеет обработки входных параметров, поэтому все исходные данные мы указываем в начале скрипта в блоке переменных. В ходе выполнения скрипт создаёт лог-файл о результатах отключения и завершения сессий в том же каталоге, где размещён сам скрипт.
Скрипт размещаем на каким-нибудь сервере, отличном от серверов RDSH, на которых будет выполняться скриптовая обработка сессий. Например, можно разместить этот скрипт на сервере с ролью RD Connection Broker (RDCB), если эта роль работает на выделенном сервере. Для выполнения скрипта на выбранном сервере потребуется установка PowerShell-модулей RemoteDesktop и ActiveDirectory. Если первый модель уже присутствует на сервере RDCB, то второй можно доустановить PS-командой:
Install-WindowsFeature -Name "RSAT-AD-PowerShell"
Автоматический периодический запуск скрипта можно настроить в Task Scheduler от имени специально созданной сервисной учётной записи Group Managed Service Account (gMSA). Пример того, как создать и установить учётную запись gMSA можно найти в статьях Вики:
- Создание учётных записей MSA и gMSA
- Установка учётных записей MSA и gMSA на серверы
В нашем примере в домене AD создана учётная запись gMSA с именем KOMs-S06$ и установлена на сервере RDCB. Эта учётная запись должна быть включена в локальную группу Administrators на всех серверах RDSH, сессиями которых мы планируем управлять из скрипта. Также учётной записи gMSA на сервере RDCB потребуется дать права на чтение каталога со скриптом и права на запись в файл лога (для этого потребуется предварительно создать пустой лог-файл).
Прежде, чем создавать задание планировщика по запуску скрипта, выполним его проверочный запуск от имени учётной записи gMSA с помощью утилиты PsExec:
PsExec64.exe -i -u KOMs-S06$ -p ~ cmd.exe
Запустив в контексте пользователя gMSA интерпретатор командной строки cmd.exe, попробуем выполнить скрипт:
powershell.exe -NoProfile -command "C:ScriptsRDS-Logoff-Inactive.ps1"
Если скрипт отработал как надо и создал записи в лог-файл об отключенных и завершённых сессиях в ферме RD Connection Broker, выполняем его добавление в планировщик заданий Task Scheduler:
$Action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-NoProfile -command `"C:ScriptsRDS-Logoff-Inactive.ps1`""
$Trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Minutes 15) -RepetitionDuration ([System.TimeSpan]::MaxValue)
$SvcUser = New-ScheduledTaskPrincipal -UserID KOMs-S06$ -LogonType Password
Register-ScheduledTask -TaskName "RDS Logoff Inactive Users" -Action $Action -Trigger $Trigger -Principal $SvcUser
Таким образом, задание планировщика каждые 15 минут будет подключаться к ферме RDCB, получать из фермы информацию о всех сессиях пользователей на серверах RDSH и отключать простаивающие и завершать отключенные сессии пользователей.
Описание проблемы
В Windows Server 2012 R2 существует ферма RDS из 15 узлов подключения. Для этого нужны серверы и серверы, которые работают постоянно. Если в вашей ферме не настроены тайм-ауты времени безотказной работы, пользователи могут зависать на авторизованных соединениях на недели или месяцы. Логично предположить, что это не очень хорошо и приводит к различным последствиям, одним из которых является полная блокировка сеанса, когда человек не может подключиться к терминальному серверу и видит сообщение «Служба профилей пользователей запущена» или другое «Может не завершить запрошенную операцию », я не говорю о повреждении профиля пользователя. В результате того, что брокеры RDS видят, что пользователь уже вошел в систему, они не позволяют ему повторно подключаться к другому серверу узла сеанса, даже если вы закрываете новые подключения на текущем. Пока вы не выйдете из системы для этого сеанса, он все равно будет мешать. Давайте узнаем, как это сделать.
Методы завершения сессии пользователя не терминале
Есть несколько способов удалить пользователя с сервера.
- вы можете завершить сеанс пользователя (выйти из системы) из оснастки управления фермой RDS
- Вы также можете выйти из системы с самого терминального сервера из диспетчера задач
- Пользователь может выйти из программы командной строки rwinsta
- Отключите утилиту командной строки
- Утилита восстановления сеанса
- * Командлет Stop-TSSession
Как выкинуть пользователя из оснастки управления RDS
Итак, у меня есть любимый тестовый пользователь Active Directory Барбоскин Геннадий Викторович. Предположим, он подошел к терминальному столу, и из-за блокировки его сеанса нам нужно его вытащить. Первый способ – использовать оснастку управления фермой RDS, я уже говорил вам, как ее создать. Откройте раздел с вашей коллекцией фермы RDS. Введите логин или фамилию нужного сотрудника в поисковый фильтр. В итоге получаем хост, на котором он работает.
Щелкните по нему правой кнопкой мыши. В контекстном меню появится пункт «Выйти», что соответствует окончанию сеанса (Выход). Также есть пункт «Отключить», если вы его выберете, пользователь будет выгнан с терминального сервера, но его сессия останется на нем, эта операция эквивалентна тому, если пользователь только что нажал на крестик в окне с именем терминального сервера.
После выбора пункта «Отключить» сеанс пользователя в ферме RDS отключится нормально. Пользователь сам увидит сообщение «Служба профилей пользователей запущена» и окно закроется без ошибок.
Второй метод разлогинить пользователя на терминальном сервере
Второй метод аналогичен первому, за исключением того, что вам нужно войти на требуемый сервер, открыть оснастку диспетчера задач и выйти из системы пользователя. Сказав это, я рассказал вам, как добраться до нужного члена фермы RDS. Затем щелкните правой кнопкой мыши в области запуска и выберите в контекстном меню пункт «Диспетчер задач». Кстати, вы также можете вызвать «Диспетчер задач» с помощью сочетания клавиш CTRL + SHIFT + ESC.
Находим нужного нам пользователя и кликаем по нему правой кнопкой, в интересующем нас контекстном меню пункт «Выход». Выбираем его и завершаем сеанс пользователя.
Так бывает, что первые два метода не помогают в тех случаях, когда сеанс пользователя зависает на сервере терминалов, кажется, что вы делаете выход из графического интерфейса, но это не работает. В этих случаях вам нужно использовать командную строку или утилиты PowerShell
Использование утилиты RWINSTA
Если вы окажетесь в ситуации, когда графические методы не позволяют вывести пользователя из системы, а это необходимо, утилиты командной строки придут вам на помощь. RWINSTA – это встроенная утилита Windows, которая позволяет восстанавливать сеансы на основе идентификатора сеанса и имени сеанса. Прежде всего, вам нужно вычислить либо идентификатор сеанса, либо его имя, как я вам сказал, обо всех известных мне методах, с которыми вы можете ознакомиться. Выберу утилиту qwinsta. Пишем команду:
qwinsta | findstr barboskin.g (местный)
или удаленно qwinsta / server: имя сервера | findstr barboskin.g
В моем примере имя сеанса – rdp-tcp # 172, а его идентификатор – 515. Мы пишем команду:
rwinsta rdp-tcp # 172 / сервер: localhost или rwinsta 515 / сервер: localhost
И в первом, и во втором случае пользователь будет отключен от этого сервера. Эту команду можно запускать удаленно с вашего рабочего места, если у вас есть право выйти из системы. Этот метод мне не раз помогал в моей практике, например, случай с заблокированным сеансом на Windows Server 2016, где вместо имени пользователя было имя (4).
Как отключить пользователя через reset session
вы также можете завершить сеанс пользователя с помощью утилиты командной строки Reset Session. В текущем примере у моего Геннадия Викторовича Барбоскина имя сеанса rdp-tcp # 16 с его ID 11. Эту утилиту можно использовать как локально на самом терминальном сервере, так и на вашей рабочей станции, также есть ключ / сервер.
восстановить сеанс rdp-tcp # 16 или восстановить сеанс 11
Вы можете узнать больше об утилите восстановления сеанса на веб-сайте Microsoft: https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/reset-session
Как отключить пользователя через logoff
Вы также можете выйти из учетной записи пользователя или даже из заблокированной с помощью утилиты командной строки «LogOff». В этом примере Геннадий Барбоскин имеет имя сеанса rdp-tcp # 43. В командной строке от имени администратора введите:
logoff rdp-tcp # 43 / server: localhost (имя сервера можно изменить) или logoff 54 / server: localhost
Выход пользователя через командлет Stop-TSSession
Есть замечательный командлет Stop-TSSession. Давайте посмотрим на идентификатор сервера и имя сеанса, для этого в открытом PowerShell введите:
Get-TSSession | FT
В результате я вижу, что пользователь barboskin.g имеет SessionID 3. Итак, введите
Принудительный стоп-TSSession 3 или Stop-TSSession 3-Force
Мы согласны с тем, что для этого пользователя будет выполнен выход. Проверяем, что сессия закончилась. Вы можете отключать сеансы с помощью такого простого скрипта из планировщика:
Модуль импорта PSTerminalServices
Get-TSSession -ComputerName SERVER_NAME -filter {$ _.IDsession -ne 0 -AND $ _.IDsession -ne 1 -AND $ _.IDsession -ne 65536} | Stop-TSSession – Force
Выход пользователя через командлет Stop-TerminalSession
Этот командлет устанавливается отдельно с пакетом Pscx. Прежде всего, мы видим локально или удаленно идентификаторы сеанса пользователя, для которого мы хотим выйти. Выполняем команду:
Get-TerminalSession – имя сервера ComputerName
Мне нужен идентификатор сеанса 427. Затем мы воспользуемся командлетом Stop-TerminalSession, чтобы выгнать пользователя и завершить его сеанс.
Stop-TerminalSession -ComputerName имя сервера -Id 427 -Force
Как видите, сеанс 427 больше не существует, и мы смогли исключить пользователя из сеанса RDS с помощью командлета Stop-TerminalSession.
Вы просматриваете более старую редакцию этой страницы.
Задача,
которая в Windows Server 2008 R2 решалась несколькими кликами мышки, в Windows Server 2012 R2 стала несколько нетривиальна, а именно:
предоставить права пользователю для отправки сообщений, просмотра или активного управления, завершения,
сброса подвисших терминальных сессий, и т.д., не давая ему административных прав на сервере и в домене.
Разрешение |
Возможности |
Запрос сведений |
Запрос сведений о сеансах и серверах Узел сеансов удаленных рабочих столов |
Установка сведений |
Настройка свойств подключения |
Удаленное управление |
Просмотр или активное управление сеансом другого пользователя |
«Вход» |
Вход в сеанс на сервере Узел сеансов удаленных рабочих столов |
Выход из системы |
Выход пользователя из сеанса |
Сообщение |
Отправка сообщения сеансу пользователя |
Подключение |
Подключение к сеансу другого пользователя |
Отключение |
Отключение сеанса пользователя |
Виртуальные каналы |
Использование в сеансе виртуального канала, обеспечивающего перенаправление локальных устройств и ресурсов |
Permission |
Capability |
Query Information |
Query sessions and RD Session Host servers for information |
Set Information |
Configure properties of the connection |
Remote Control |
View or actively control another user’s session |
Logon |
Log on to a session on the RD Session Host server |
Logoff |
Log off a user from a session |
Message |
Send a message to a user session |
Connect |
Connect to another user session |
Disconnect |
Disconnect a user session |
Virtual Channels |
Use a virtual channel in a session, which provides local device and resource redirection |
Value |
Meaning |
|
Permission to query information about a session. |
|
Permission to modify connection parameters. |
|
Permission to shadow or remotely control another user’s session. |
|
Permission to log on to a session on the server. |
|
Permission to log off a user from a session. |
|
Permission to send a message to another user’s session. |
|
Permission to connect to another session. |
|
Permission to disconnect a session. |
|
Permission to use virtual channels. Virtual channels provide access from a server program to client devices. |
|
Permission to reset or end a session or connection. |
Ответы
|
||||||||
|
||||||||