Загрузка данных
<#
.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
}