39 lines
1.1 KiB
PowerShell
39 lines
1.1 KiB
PowerShell
[CmdletBinding()]
|
|
param(
|
|
[Parameter(Mandatory = $true)]
|
|
[string]$BackupDirectory
|
|
)
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
$target = (Resolve-Path -LiteralPath $BackupDirectory).Path
|
|
$requiredFiles = @(
|
|
"SHA256SUMS",
|
|
"postgres.dump",
|
|
"postgres.contents",
|
|
"minio-data.tar.gz",
|
|
"manifest.txt"
|
|
)
|
|
foreach ($file in $requiredFiles) {
|
|
if (-not (Test-Path -LiteralPath (Join-Path $target $file) -PathType Leaf)) {
|
|
throw "备份缺少文件:$file"
|
|
}
|
|
}
|
|
|
|
foreach ($line in Get-Content -LiteralPath (Join-Path $target "SHA256SUMS")) {
|
|
if ($line -notmatch "^([0-9a-fA-F]{64})\s{2}(.+)$") {
|
|
throw "SHA256SUMS 格式无效:$line"
|
|
}
|
|
$expected = $Matches[1].ToLowerInvariant()
|
|
$file = $Matches[2]
|
|
$path = Join-Path $target $file
|
|
if (-not (Test-Path -LiteralPath $path -PathType Leaf)) {
|
|
throw "校验文件不存在:$file"
|
|
}
|
|
$actual = (Get-FileHash -Algorithm SHA256 -LiteralPath $path).Hash.ToLowerInvariant()
|
|
if ($actual -ne $expected) {
|
|
throw "备份校验失败:$file"
|
|
}
|
|
}
|
|
|
|
Write-Output "备份校验通过:$target"
|