Utility for archiving files from a specified folder (excluding any specified subfolders, files, or file types), creating Full backups every N days, and Partial backups in between.
Each time the module is executed (Backup-FolderContents), it determines whether a Full or Partial backup should be performed based on the date/time and type (full/partial) of the last backup.
NOTE: The archive operation will fail if files are read-locked (in use).
PsBackupUril has no external dependencies!
Install directly from the official Powershell Gallery:
PS> Install-Module -Name PsBackupUtil
Microsoft.PowerShell_profile.ps1
(in C:\Users\<user>\Documents\PowerShell
. Create the file if it doesn't exist).Import-Module C:\path\to\BackupUtil\BackupUtil.psd1 -Force
The archive files are compressed Zip files, named using the following convention:
<base-name>-<yyyy>-<MM>-<dd>-<HH>-<mm>-<ss>[-<archive-mode-marker>].<extension>
Base-Name ::= User specified, or if unspecified, name of source folder to be archived. NOTE: Any '-' char in the base name will be replaced with '_'
y, M, d, H, m, s ::= Component parts of the current date/time (in 24-hour format)
Archive-Mode-Marker ::= 'Full' | 'Part' | <blank>
Extension ::= User sepcified (default: 'zip')
Parameter | Required | Data Type | Default | Description |
---|---|---|---|---|
$BaseName | string | Name of folder specified in $SourceFolder | The Base Name for the archive file | |
$SourceFolder | True | string | Path to folder containing files to be backed up | |
$DestinationFolder | True | string | Path to folder where archive file for the backup will be placed | |
$Extension | string | 'zip' | Archive file extension | |
$FullBackupInterval | int | 7 | Number of days between full backups | |
$RemovePartialsAfterFull | bool | False | Remove prior period partial backup file(s) after creating a full-backup. CURRENTLY NOT IMPLEMENTED | |
$FullBackupMarker | string | 'Full' | Marker text to use for Full backup archive names | |
$PartialBackupMarker | string | 'Part' | Marker text to use for Partial backup archive names | |
$IgnoreFolders | string array | Names of folders to omit from the backup | ||
$IgnoreFileTypes | string array | File types (ex: '*.zip') to omit from the backup | ||
$IgnoreFiles | string array | Names of specific files (name & extension, no path) to omit from the backup |
Here's a sample script that uses the BackupUtil module to backup project files.
##Requires -Module BackupUtil
$project = "MySampleProject"
$srcRoot = Join-Path "C:\Projects" $project
$dstRoot = Join-Path "D:\Archives\Projects" $project
#----------------------------------------------------------------------------------------------------------
# backup project source code...
$FoldersToIgnore = @(
"obj", "bin", ".vs", ".git",
"packages", "node_modules", "wwwroot"
)
$FileTypesToIgnore = @("*.zip", "*.user", "*.msi")
$FilesToIgnore = @()
$nam = "ProjectCode"
$dir = "src"
$src = Join-Path $srcRoot $dir
$dst = Join-Path $dstRoot $dir
Backup-FolderContents `
-BaseName = $nam ` # the base name of the archive file (SourceFolder folder name used if omitted)
-SourceFolder $src ` # root folder containing files that will be backed up
-DestinationFolder $dst ` # root folder where archived files will be backed up to
-FullBackupInterval 10 ` # number of days between full backups
-IgnoreFolders $FoldersToIgnore ` # list of folders to ignore (not backup)
-IgnoreFileTypes $FileTypesToIgnore ` # List of file types to ignore (not backup)
-IgnoreFiles $FilesToIgnore ` # List of specific files to ignore (not backup)
-Verbose -Debug
#----------------------------------------------------------------------------------------------------------
# backup project docs...
$FoldersToIgnore = @()
$FileTypesToIgnore = @()
$FilesToIgnore = @()
$nam = "ProjectDocs"
$dir = "docs"
$src = Join-Path $srcRoot $dir
$dst = Join-Path $dstRoot $dir
Backup-FolderContents `
-BaseName = $nam ` # the base name of the archive file (SourceFolder folder name used if omitted)
-SourceFolder $src ` # root folder containing files that will be backed up
-DestinationFolder $dst ` # root folder where archived files will be backed up to
-FullBackupInterval 10 ` # number of days between full backups
-IgnoreFolders $FoldersToIgnore ` # list of folders to ignore (not backup)
-IgnoreFileTypes $FileTypesToIgnore ` # List of file types to ignore (not backup)
-IgnoreFiles $FilesToIgnore ` # List of specific files to ignore (not backup)
-Verbose -Debug