Город МОСКОВСКИЙ
00:02:31

Secure Backup Bitlocker

Аватар
maksimov
Просмотры:
10
Дата загрузки:
06.03.2026 11:11
Длительность:
00:02:31
Категория:
Обучение

Описание

# === SecureBackup.ps1 ===
# Требуются права Администратора
if (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
Write-Warning "Запустите PowerShell от имени Администратора!"
Break
}

# --- Настройки ---
$SourcePath = "C:\Backups_06.03.2026"
$DriveLetter = "D"
$DestPath = "${DriveLetter}:\ServerBackups_06.03.2026"

# --- 1. Скрытый ввод пароля (исправлено) ---
Write-Host "Введите пароль BitLocker для диска ${DriveLetter}: " -NoNewline -ForegroundColor Cyan
$SecurePass = Read-Host -AsSecureString
Write-Host ""

# Проверка что пароль введён
if ([System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecurePass)) -eq "") {
Write-Error "Пароль не может быть пустым!"
Break
}

# --- 2. Разблокировка диска ---
try {
Write-Host "Разблокировка диска..." -ForegroundColor Yellow
Unlock-BitLocker -MountPoint "${DriveLetter}:" -Password $SecurePass -ErrorAction Stop
Start-Sleep -Seconds 2
} catch {
Write-Error "Ошибка разблокировки: $_"
Break
}

# --- 3. Копирование с прогрессом ---
try {
Write-Host "Начало копирования..." -ForegroundColor Green

$TotalFiles = Get-ChildItem -Path $SourcePath -Recurse -File
$TotalSize = ($TotalFiles | Measure-Object -Property Length -Sum).Sum
$CopiedSize = 0

if ($TotalSize -eq 0) { throw "Файлы не найдены" }

foreach ($File in $TotalFiles) {
$DestFile = $File.FullName.Replace($SourcePath, $DestPath)
$DestDir = Split-Path $DestFile -Parent

if (!(Test-Path $DestDir)) { New-Item -ItemType Directory -Force -Path $DestDir | Out-Null }

Copy-Item -Path $File.FullName -Destination $DestFile -Force
$CopiedSize += $File.Length

$Percent = [int]($CopiedSize / $TotalSize * 100)
Write-Progress -Activity "Копирование бэкапов" -Status "$Percent%" -PercentComplete $Percent
}
Write-Host "Копирование завершено успешно." -ForegroundColor Green
} catch {
Write-Error "Ошибка копирования: $_"
} finally {
# --- 4. Обязательная блокировка ---
Write-Host "Блокировка диска..." -ForegroundColor Red
Lock-BitLocker -MountPoint "${DriveLetter}:" -ForceDismount
$SecurePass.Dispose()
Write-Host "Готово. Диск заблокирован." -ForegroundColor Cyan
}

Рекомендуемые видео