将备份文件保存到 Windows Server 2016 中的 DropBox 文件夹
Save Backup Files to DropBox folder in Windows Server 2016
我正在尝试创建一个 PowerShell 脚本来将我的数据库备份到特定的 DropBox 文件夹。
我从 Windows 防火墙开始,使用 netsh 防火墙调用,效果很好。我的防火墙规则已成功保存到我指定的 DropBox 文件夹。
但是,我尝试了一种类似的方法来将我的数据库备份到同一文件夹,但失败并出现拒绝访问错误。如果我将文件夹更改为本地根文件夹,例如 C:\DatabaseBackup,则以下防火墙脚本可以正常工作。
有人可以帮我解决这个 DropBox 问题吗?我尝试访问 DropBox 网站,他们确实提供了一个 API,但我不知道如何使用它或是否可以使用它。
我发现另一个网站有一个上传的脚本,但它是一个 BASH 用于 Unix 和 linus 的 .sh 脚本,出于严格的安全原因,我不想在我的服务器上安装 WSL。
netsh advfirewall export "C:\Users\xyxAbc\Dropbox\VPSBACKUP\vps-fw-rules.wfw"
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | out-null
$s = new-object ("Microsoft.SqlServer.Management.Smo.Server") $instance
### Script A (failed with "Access Denied".
$bkdir = "C:\Users\xyxAbc\Dropbox\VPSBACKUP"
$dbs = $s.Databases
foreach ($db in $dbs)
{
if($db.Name -ne "tempdb" -or $db.Name -ne "master" -or $db.Name -ne 'model' -or $db.Name -ne'msdb')
{
$dbname = $db.Name
# $dt = get-date -format yyyyMMddHHmm #We use this to create a file name based on the timestamp
$dbBackup = new-object ("Microsoft.SqlServer.Management.Smo.Backup")
$dbBackup.Action = "Database"
$dbBackup.Database = $dbname
$dbBackup.Devices.AddDevice($bkdir + "\" + $dbname + "_db_" + ".bak", "File")
$dbBackup.SqlBackup($s)
}
}
### Script B (Succeded without issues)
$bkdir = "C:\DatabaseBackup"
$dbs = $s.Databases
foreach ($db in $dbs)
{
if($db.Name -ne "tempdb" -or $db.Name -ne "master" -or $db.Name -ne 'model' -or $db.Name -ne'msdb')
{
$dbname = $db.Name
# $dt = get-date -format yyyyMMddHHmm #We use this to create a file name based on the timestamp
$dbBackup = new-object ("Microsoft.SqlServer.Management.Smo.Backup")
$dbBackup.Action = "Database"
$dbBackup.Database = $dbname
$dbBackup.Devices.AddDevice($bkdir + "\" + $dbname + "_db_" + ".bak", "File")
$dbBackup.SqlBackup($s)
}
}
这个过程要小心。在我的服务器上安装 DropBox 后,我发现磁盘 Space 突然大幅减少。出于某种奇怪的原因,DropBox 试图将我的 1000 Gig space 放入那个小型 60 Gig 硬盘驱动器中,这造成了资源减少的问题。
我从服务器中删除并删除了所有 DropBox 引用,并创建了一个全新的 DropBox 帐户,该帐户将仅支持该服务器备份需求。然后,我与我的 1000Gig 帐户共享了该文件夹,并且能够从我的其他计算机上看到它。
我正在尝试创建一个 PowerShell 脚本来将我的数据库备份到特定的 DropBox 文件夹。
我从 Windows 防火墙开始,使用 netsh 防火墙调用,效果很好。我的防火墙规则已成功保存到我指定的 DropBox 文件夹。
但是,我尝试了一种类似的方法来将我的数据库备份到同一文件夹,但失败并出现拒绝访问错误。如果我将文件夹更改为本地根文件夹,例如 C:\DatabaseBackup,则以下防火墙脚本可以正常工作。
有人可以帮我解决这个 DropBox 问题吗?我尝试访问 DropBox 网站,他们确实提供了一个 API,但我不知道如何使用它或是否可以使用它。
我发现另一个网站有一个上传的脚本,但它是一个 BASH 用于 Unix 和 linus 的 .sh 脚本,出于严格的安全原因,我不想在我的服务器上安装 WSL。
netsh advfirewall export "C:\Users\xyxAbc\Dropbox\VPSBACKUP\vps-fw-rules.wfw"
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | out-null
$s = new-object ("Microsoft.SqlServer.Management.Smo.Server") $instance
### Script A (failed with "Access Denied".
$bkdir = "C:\Users\xyxAbc\Dropbox\VPSBACKUP"
$dbs = $s.Databases
foreach ($db in $dbs)
{
if($db.Name -ne "tempdb" -or $db.Name -ne "master" -or $db.Name -ne 'model' -or $db.Name -ne'msdb')
{
$dbname = $db.Name
# $dt = get-date -format yyyyMMddHHmm #We use this to create a file name based on the timestamp
$dbBackup = new-object ("Microsoft.SqlServer.Management.Smo.Backup")
$dbBackup.Action = "Database"
$dbBackup.Database = $dbname
$dbBackup.Devices.AddDevice($bkdir + "\" + $dbname + "_db_" + ".bak", "File")
$dbBackup.SqlBackup($s)
}
}
### Script B (Succeded without issues)
$bkdir = "C:\DatabaseBackup"
$dbs = $s.Databases
foreach ($db in $dbs)
{
if($db.Name -ne "tempdb" -or $db.Name -ne "master" -or $db.Name -ne 'model' -or $db.Name -ne'msdb')
{
$dbname = $db.Name
# $dt = get-date -format yyyyMMddHHmm #We use this to create a file name based on the timestamp
$dbBackup = new-object ("Microsoft.SqlServer.Management.Smo.Backup")
$dbBackup.Action = "Database"
$dbBackup.Database = $dbname
$dbBackup.Devices.AddDevice($bkdir + "\" + $dbname + "_db_" + ".bak", "File")
$dbBackup.SqlBackup($s)
}
}
这个过程要小心。在我的服务器上安装 DropBox 后,我发现磁盘 Space 突然大幅减少。出于某种奇怪的原因,DropBox 试图将我的 1000 Gig space 放入那个小型 60 Gig 硬盘驱动器中,这造成了资源减少的问题。
我从服务器中删除并删除了所有 DropBox 引用,并创建了一个全新的 DropBox 帐户,该帐户将仅支持该服务器备份需求。然后,我与我的 1000Gig 帐户共享了该文件夹,并且能够从我的其他计算机上看到它。