-
Notifications
You must be signed in to change notification settings - Fork 2
/
Backup-WSL2.ps1
39 lines (31 loc) · 1.36 KB
/
Backup-WSL2.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<#
.SYNOPSIS
This script performs a backup of a WSL2 distribution to a tar archive on the host system.
.DESCRIPTION
This script performs a backup of a WSL2 distribution to a tar archive on the host system.
.EXAMPLE
PS> .\Backup-WSL2.ps1 -Distribution Ubuntu -DestinationPath $env:USERPROFILE\backups
.EXAMPLE
PS> .\Backup-WSL2.ps1 -Distribution Ubuntu
#>
param(
# path to save the archived, snapshot
[parameter(Mandatory = $true)][string]$DestinationPath,
# name of the WSL2 distribution as listed in the output of `wsl -l`
[ValidateNotNullOrEmpty()][string]$Distribution = 'Ubuntu'
)
# 'sourcing' in the log message function
. "$PSScriptRoot\Log-Message.ps1"
# try to create the path when it does not exist
if (!(Test-Path $DestinationPath)) {
Log 'Specified DestinationPath directory did not exist, attempting to create it.'
New-Item ($DestinationPath) -ItemType Directory -ErrorAction SilentlyContinue | Out-Null
}
$command = (Get-Command wsl).Definition
# the backup command
$dateExecuted = $(Get-Date -Format FileDate)
$commandArgs = "--export $Distribution $DestinationPath\$Distribution-$dateExecuted.tar"
# execute the backup
Log "Export of $Distribution from WSL2 to a tar file saved in $DestinationPath starting"
Invoke-Expression "& $command $commandArgs"
Log "Export of $Distribution from WSL2 to a tar file saved in $DestinationPath complete"