34 lines
993 B
PowerShell
34 lines
993 B
PowerShell
param(
|
|
[string]$Label = "snapshot"
|
|
)
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
$siteRoot = (Resolve-Path (Join-Path $PSScriptRoot "..")).ProviderPath
|
|
$oldRoot = Join-Path $siteRoot ".old"
|
|
$safeLabel = ($Label -replace "[^A-Za-z0-9._-]", "-").Trim("-")
|
|
|
|
if ([string]::IsNullOrWhiteSpace($safeLabel)) {
|
|
$safeLabel = "snapshot"
|
|
}
|
|
|
|
$timestamp = Get-Date -Format "yyyyMMdd-HHmmss"
|
|
$snapshot = Join-Path $oldRoot "$timestamp-$safeLabel"
|
|
|
|
New-Item -ItemType Directory -Force -Path $snapshot | Out-Null
|
|
|
|
$oldDir = Get-Item -LiteralPath $oldRoot -Force
|
|
$oldDir.Attributes = $oldDir.Attributes -bor [System.IO.FileAttributes]::Hidden
|
|
|
|
$excludeDirs = @(".git", ".old")
|
|
|
|
Get-ChildItem -LiteralPath $siteRoot -Force | Where-Object {
|
|
$excludeDirs -notcontains $_.Name
|
|
} | ForEach-Object {
|
|
Copy-Item -LiteralPath $_.FullName -Destination $snapshot -Recurse -Force
|
|
}
|
|
|
|
icacls (Resolve-Path -LiteralPath $snapshot).ProviderPath /remove:g "*S-1-1-0" /T | Out-Null
|
|
|
|
Write-Host "Saved snapshot: $snapshot"
|