Blog Post

Backup VisualSVN using PowerShell

,

Quick and easy backup for VisualSVN.  Wraps the svnadmin.exe and performs a hotcopy of all repositories in the $source_path, dumping them to the $backup_path

param
(
    [string]$backup_path = $(throw "backup_path is required"),
    [string]$source_path = $(throw "source_path is required"),
    [string]$svnadmin = "C:Program Files (x86)VisualSVN Serverbinsvnadmin.exe"
)
# Validate paths exist
if (!(Test-Path $backup_path -PathType Container))
{
    Write-Host "-backup_path $backup_path does not exist"
    exit -1
}
if (!(Test-Path $source_path -PathType Container))
{
    Write-Host "-source_path $source_path does not exist"
    exit -1
}
if (!(Test-Path $svnadmin -PathType Leaf))
{
    Write-Host "-svnadmin $svnadmin does not exist"
    exit -1
}
# Root user/non-repository data
$files = Get-ChildItem $source_path | Where {!$_.PsIsContainer} | Select-Object Name
foreach ($file in $files)
{
    Copy-Item (Join-Path $source_path $file.Name) (Join-Path $backup_path $file.Name)
}
# List of repository names (sub-directories under source path
$repositories = Dir $source_path | Where  {$_.mode -match "d"} | Select name
ForEach ($repo in $repositories)
{
    Write-Host $repo.Name
    # Remove existing backup directory for the repository
    if (Test-Path (Join-Path $backup_path $repo.Name))
    {
        Remove-Item -path (Join-Path $backup_path $repo.Name) -recurse -force
    }
    # Perform hot copy
    & $svnadmin "hotcopy" (Join-Path $source_path $repo.Name) (Join-Path $backup_path $repo.Name)
}

 

Original post (opens in new tab)
View comments in original post (opens in new tab)

Rate

You rated this post out of 5. Change rating

Share

Share

Rate

You rated this post out of 5. Change rating