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


<#
.SYNOPSIS
    Удаляет диск профиля пользователя (User Profile Disk) в RDS.

.DESCRIPTION
    Скрипт получает настройки коллекции сеансов на указанном брокере подключения,
    находит диск профиля заданного пользователя по его SID и удаляет файл диска
    после подтверждения администратором.

.PARAMETER ConnectionBroker
    Имя или FQDN брокера подключения к удалённому рабочему столу.

.PARAMETER CollectionName
    Имя коллекции сеансов, в которой используется диск профиля.

.PARAMETER UserName
    SamAccountName пользователя, чей диск профиля требуется удалить.

.EXAMPLE
    .\Remove-UPD.ps1 -ConnectionBroker "rdsbroker.contoso.com" `
                     -CollectionName "Session Collection" `
                     -UserName "jdoe"
#>
param(
    [Parameter(Mandatory = $true)]
    [string]$ConnectionBroker,

    [Parameter(Mandatory = $true)]
    [string]$CollectionName,

    [Parameter(Mandatory = $true)]
    [string]$UserName
)

# --- 1. Подключение к модулю RemoteDesktop ---------------------------------
Import-Module RemoteDesktop -ErrorAction SilentlyContinue

# --- 2. Получение конфигурации коллекции (путь к дискам профилей) ----------
try {
    $collectionConfig = Get-RDSessionCollectionConfiguration `
        -CollectionName $CollectionName `
        -ConnectionBroker $ConnectionBroker `
        -UserProfileDisk `
        -ErrorAction Stop
}
catch {
    Write-Error "Не удалось получить конфигурацию коллекции '$CollectionName' на брокере '$ConnectionBroker': $_"
    exit 1
}

if (-not $collectionConfig.EnableUserProfileDisk) {
    Write-Error "Для коллекции '$CollectionName' диски профилей пользователей не включены."
    exit 1
}

$diskPath = $collectionConfig.DiskPath
if ([string]::IsNullOrWhiteSpace($diskPath)) {
    Write-Error "Не удалось определить путь к дискам профилей для коллекции '$CollectionName'."
    exit 1
}

# --- 3. Получение SID пользователя -----------------------------------------
try {
    $adUser  = Get-ADUser -Identity $UserName -Properties SID -ErrorAction Stop
    $userSID = $adUser.SID.Value
}
catch {
    Write-Error "Пользователь '$UserName' не найден в Active Directory: $_"
    exit 1
}

# --- 4. Формирование полного пути к файлу диска профиля --------------------
$updFileName = "UVHD-$userSID.vhdx"
$updFullPath = Join-Path -Path $diskPath -ChildPath $updFileName

if (-not (Test-Path -Path $updFullPath -PathType Leaf)) {
    Write-Error "Диск профиля для пользователя '$UserName' (SID: $userSID) не найден по пути: $updFullPath"
    exit 1
}

# --- 5. Окно подтверждения с информацией о планируемом действии ------------
$message = @"
Вы собираетесь удалить диск профиля пользователя.

Пользователь : $UserName
SID          : $userSID
Коллекция    : $CollectionName
Брокер       : $ConnectionBroker
Путь к диску : $updFullPath

Это действие необратимо. Продолжить?
"@

Add-Type -AssemblyName System.Windows.Forms

$answer = [System.Windows.Forms.MessageBox]::Show(
    $message,
    "Подтверждение удаления диска профиля",
    [System.Windows.Forms.MessageBoxButtons]::YesNo,
    [System.Windows.Forms.MessageBoxIcon]::Warning
)

if ($answer -ne [System.Windows.Forms.DialogResult]::Yes) {
    Write-Host "Удаление отменено пользователем." -ForegroundColor Yellow
    exit 0
}

# --- 6. Удаление файла диска профиля ---------------------------------------
try {
    Remove-Item -Path $updFullPath -Force -ErrorAction Stop
    Write-Host "Диск профиля успешно удалён: $updFullPath" -ForegroundColor Green
}
catch {
    Write-Error "Не удалось удалить диск профиля: $_"
    exit 1
}