Загрузка данных


<#
.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 "Произошла ошибка: $_"
}