<#
.SYNOPSIS
Принудительно завершает сеанс указанного пользователя в заданной коллекции RDS.
.DESCRIPTION
Скрипт подключается к указанному брокеру подключения RDS, получает список сеансов
в заданной коллекции, фильтрует их по имени пользователя и выполняет logoff.
.PARAMETER BrokerName
Имя или FQDN сервера брокера подключения к удалённому рабочему столу.
.PARAMETER CollectionName
Имя коллекции сеансов, в которой нужно искать пользователя.
.PARAMETER UserName
Имя пользователя (в формате DOMAIN\UserName или UserName), чей сеанс нужно завершить.
.EXAMPLE
.\Logoff-RDSUser.ps1 -BrokerName "rdcb.contoso.com" -CollectionName "Session Collection" -UserName "CONTOSO\john.smith"
#>
param(
[Parameter(Mandatory = $true)]
[string]$BrokerName,
[Parameter(Mandatory = $true)]
[string]$CollectionName,
[Parameter(Mandatory = $true)]
[string]$UserName
)
# Импорт модуля RemoteDesktop (требуется для Get-RDUserSession и Invoke-RDUserLogoff)
Import-Module RemoteDesktop -ErrorAction Stop
try {
# Получаем сеансы пользователя в указанной коллекции
$sessions = Get-RDUserSession -ConnectionBroker $BrokerName -CollectionName $CollectionName |
Where-Object { $_.UserName -eq $UserName }
if (-not $sessions) {
Write-Warning "Сеансы для пользователя '$UserName' в коллекции '$CollectionName' на брокере '$BrokerName' не найдены."
return
}
# Завершаем каждый найденный сеанс
foreach ($session in $sessions) {
Write-Host "Завершение сеанса пользователя '$UserName' (UnifiedSessionID: $($session.UnifiedSessionID)) на сервере '$($session.HostServer)'..."
Invoke-RDUserLogoff -HostServer $session.HostServer -UnifiedSessionID $session.UnifiedSessionID -Force
}
Write-Host "Операция завершена."
}
catch {
Write-Error "Произошла ошибка: $_"
}