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


# Скрипт: CreateAndCheckDisk.ps1
# Создаёт том NTFS с буквой T: на выбранном диске, проверяет его и выводит сведения

# Запрос прав администратора (требуется для работы с дисками)
if (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
    Write-Host "Ошибка: Запустите PowerShell от имени администратора!" -ForegroundColor Red
    exit 1
}

# === a. Вывод перечня дисков ===
Write-Host "`n=== Доступные физические диски ===" -ForegroundColor Cyan
$disks = Get-PhysicalDisk | Select-Object DeviceId, FriendlyName, MediaType, @{Name="Size(GB)";Expression={[math]::Round($_.Size/1GB,2)}}, OperationalStatus
$disks | Format-Table -AutoSize

# === b. Запрос номера диска ===
do {
    Write-Host "`nВНИМАНИЕ: Буква T: будет создана на выбранном диске. Все данные на нём будут удалены!" -ForegroundColor Yellow
    $diskNumber = Read-Host "Введите номер диска (DeviceId) для создания тома T:"
    
    # Проверка существования диска
    $selectedDisk = Get-PhysicalDisk -DeviceId $diskNumber -ErrorAction SilentlyContinue
    if (-not $selectedDisk) {
        Write-Host "Диск с номером $diskNumber не найден. Попробуйте снова." -ForegroundColor Red
    }
} while (-not $selectedDisk)

# === c. Предупреждение ===
Write-Host "`n⚠️ ПРЕДУПРЕЖДЕНИЕ ⚠️" -ForegroundColor Red
Write-Host "Диск $diskNumber ($($selectedDisk.FriendlyName)) будет ПОЛНОСТЬЮ ОЧИЩЕН!" -ForegroundColor Red
Write-Host "Все данные на этом диске будут безвозвратно утеряны!" -ForegroundColor Red

# === d. Подтверждение пользователя ===
$confirmation = Read-Host "`nВы уверены, что хотите продолжить? (Y/N)"
if ($confirmation -ne 'Y' -and $confirmation -ne 'y') {
    Write-Host "Операция отменена пользователем. Завершение работы." -ForegroundColor Yellow
    exit 0
}

Write-Host "`nПродолжение операции..." -ForegroundColor Green

# === e. Создание тома NTFS с буквой T: ===
try {
    # 1. Очистка диска (удаление всех разделов)
    Write-Host "Очистка диска $diskNumber..." -ForegroundColor Yellow
    Clear-Disk -Number $diskNumber -RemoveData -RemoveOEM -Confirm:$false -ErrorAction Stop
    
    # 2. Перевод диска в онлайн и инициализация (GPT или MBR)
    Set-Disk -Number $diskNumber -IsOffline $false
    Set-Disk -Number $diskNumber -IsReadOnly $false
    Initialize-Disk -Number $diskNumber -PartitionStyle GPT -Confirm:$false -ErrorAction Stop
    
    # 3. Создание раздела на весь диск
    $partition = New-Partition -DiskNumber $diskNumber -UseMaximumSize -DriveLetter T -ErrorAction Stop
    
    # 4. Форматирование в NTFS
    Write-Host "Форматирование диска в NTFS (буква T:)..." -ForegroundColor Yellow
    Format-Volume -DriveLetter T -FileSystem NTFS -NewFileSystemLabel "DataDisk" -Confirm:$false -ErrorAction Stop
    
    Write-Host "Том T: успешно создан!" -ForegroundColor Green
    
    # Небольшая пауза для синхронизации
    Start-Sleep -Seconds 2
    
} catch {
    Write-Host "Ошибка при создании тома: $_" -ForegroundColor Red
    exit 1
}

# === f. Проверка диска T: на наличие ошибок ===
Write-Host "`n=== Проверка диска T: на ошибки ===" -ForegroundColor Cyan

# Запуск chkdsk (только чтение, без исправления)
$checkResult = chkdsk T: 2>&1

# Вывод результатов
Write-Host "Результаты проверки диска T::" -ForegroundColor Yellow
$checkResult | ForEach-Object { Write-Host $_ }

# Анализ результатов
if ($checkResult -match "не обнаружено проблем" -or $checkResult -match "no problems") {
    Write-Host "`n✅ Проверка завершена: ошибки не обнаружены." -ForegroundColor Green
} elseif ($checkResult -match "обнаружены ошибки" -or $checkResult -match "problems found") {
    Write-Host "`n⚠️ На диске обнаружены ошибки! Рекомендуется запустить chkdsk T: /F" -ForegroundColor Red
} else {
    Write-Host "`nНе удалось однозначно определить результат проверки." -ForegroundColor Yellow
}

# === g. Вывод сведений о томе ===
Write-Host "`n=== Сведения о томе T: ===" -ForegroundColor Cyan

# Через Get-Volume (более подробно)
$volume = Get-Volume -DriveLetter T
if ($volume) {
    Write-Host "Буква диска:       $($volume.DriveLetter):"
    Write-Host "Метка тома:        $($volume.FileSystemLabel)"
    Write-Host "Файловая система:  $($volume.FileSystem)"
    Write-Host "Размер тома:       $([math]::Round($volume.Size/1GB,2)) GB"
    Write-Host "Свободно:          $([math]::Round($volume.SizeRemaining/1GB,2)) GB"
    Write-Host "Занято:            $([math]::Round(($volume.Size - $volume.SizeRemaining)/1GB,2)) GB"
    Write-Host "Тип носителя:      $($volume.MediaType)"
    Write-Host "Состояние:         $($volume.HealthStatus)"
} else {
    Write-Host "Том T: не найден!" -ForegroundColor Red
}

# Дополнительная информация через Get-PSDrive
$psDrive = Get-PSDrive -Name T -ErrorAction SilentlyContinue
if ($psDrive) {
    Write-Host "`nДополнительно:" -ForegroundColor Cyan
    Write-Host "Корень:            $($psDrive.Root)"
    Write-Host "Провайдер:         $($psDrive.Provider)"
}

Write-Host "`nСкрипт успешно завершён." -ForegroundColor Green