WSL和VirtualBox的定时备份脚本

606次阅读
没有评论

共计 1965 个字符,预计需要花费 5 分钟才能阅读完成。

分享一个 wsl 和一个 VirtualBox 的定时备份脚本,这两个脚本的优点是都加了备份失败自动发邮件以及清理过时的备份的功能。

wsl 的:

# attempt to run your exe.  iex is an alias for the invoke-expression cmd
wsl.exe --export Ubuntu-20.04 D:\Backup\Ubuntu-2004_$((Get-Date).ToString('yyyy-MM-dd')).tar
# Write-Output $?
# $? lets us know if the previous command was successful or not
if (!$?)
{
    $From = "@qq.com"
    $To = "[email protected]"
    $Subject = $((Get-Date).ToString('yyyy-MM-dd')) + "WSL backup failed!" 
    $Body = "WSL backup failed!"
    $smtpServer = "smtp.qq.com"
    $smtpPort = 587
    $username = "[email protected]"
    $password = "xxxx"

    $SMTPMessage = New-Object System.Net.Mail.MailMessage($From, $To, $Subject, $Body)
    $SMTPClient = New-Object Net.Mail.SmtpClient($smtpServer, $SmtpPort) 
    $SMTPClient.EnableSsl = $false 
    $SMTPClient.Credentials = New-Object System.Net.NetworkCredential($username, $password); 
    $SMTPClient.Send($SMTPMessage)
}

$FilePath = "D:\Backup"
$DaysAgo=3
$Today=Get-Date

Get-ChildItem -Path  $FilePath "*.tar" | Where-Object {$_.LastWriteTime -lt $Today.AddDays(-$DaysAgo)} |Remove-Item

上述脚本需要自己修改一下 wsl 的导出命令为你自己的 wsl 系统名和导出路径。

VirtualBox 的:

VBoxManage controlvm "Ubuntu 20.04" poweroff
VBoxManage export "Ubuntu 20.04" -o D:\Backup\ubuntu-2004_VBox_$((Get-Date).ToString('yyyy-MM-dd')).ova
if (!$?)
{
    $From = "[email protected]"
    $To = "[email protected]"
    $Subject = $((Get-Date).ToString('yyyy-MM-dd')) + "WSL backup failed!" 
    $Body = "WSL backup failed!"
    $smtpServer = "smtp.qq.com"
    $smtpPort = 587
    $username = "[email protected]"
    $password = "xxx"

    $SMTPMessage = New-Object System.Net.Mail.MailMessage($From, $To, $Subject, $Body)
    $SMTPClient = New-Object Net.Mail.SmtpClient($smtpServer, $SmtpPort) 
    $SMTPClient.EnableSsl = $false 
    $SMTPClient.Credentials = New-Object System.Net.NetworkCredential($username, $password); 
    $SMTPClient.Send($SMTPMessage)
}

$FilePath = "D:\Backup"
$DaysAgo=3
$Today=Get-Date

Get-ChildItem -Path  $FilePath "*.ova" | Where-Object {$_.LastWriteTime -lt $Today.AddDays(-$DaysAgo)} |Remove-Item

上述脚本需要自己修改一下 VirtualBox 的导出命令的系统名以及导出路径。

注意:如果想实现备份失败自动发邮件的功能,你需要自己修改一下前述两个脚本的 smtp 配置。

脚本准备好之后,我们打开 Windows 的计划任务面板,新建一个任务,其中关键的一步叫 “ 操作 ” 的步骤的详细配置截图如下:

WSL 和 VirtualBox 的定时备份脚本 最后的自动定时备份的效果以 wsl 为例如下:

WSL 和 VirtualBox 的定时备份脚本

最后说一下,上述的 wsl 备份脚本只适用于 win10 自带的 wsl,在 win11 的新版 wsl 里面会报错,目前原因未知。

正文完
 
sharp097
版权声明:本站原创文章,由 sharp097 2022-12-29发表,共计1965字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)