bsz*_*zom 6 sql svn backup powershell webdav
我正在尝试使用PowerShell创建一些备份,然后将这些备份复制到Web文件夹(或者换句话说,将它们上传到WebDAV共享).
起初我以为我会从PowerShell中做WebDAV的东西,但似乎这仍然需要相当数量的"手工劳动",即:构建HTTP请求.然后我决定从脚本创建一个Web文件夹,让Windows处理WebDAV的东西.似乎一切都需要创建一个Web文件夹创建一个标准快捷,描述在这里.
我无法弄清楚的是如何将文件实际复制到快捷方式的目标..?也许我会以错误的方式解决这个问题.
如果我能以某种方式加密脚本中的WebDAV凭据,然后让它创建Web文件夹,分流文件,再次删除Web文件夹,那将是理想的选择.或者甚至更好,根本不使用网络文件夹.第三种选择是手动创建Web文件夹并将其留在那里,但我宁愿不这样做.
任何想法/指针/提示?:)
如果您使用powershell使用svnadmin dump备份SVN存储库,请注意对文件的管道将无声地损坏您的备份.
Powershell喜欢在滚动时将内容更改为UTF-16,它还会将unix换行符更改为windows换行符.当您尝试恢复时,这将回来困扰您.
这里描述的问题很好:
解决方案:
总之,使用cmd.exe而不是powershell:
cmd.exe /c svnadmin dump ... `> dumpfile.dump
Run Code Online (Sandbox Code Playgroud)
请注意,输出重定向上的反引号需要停止PowerShell解析它.
好吧,与此同时,我拼凑了另一个解决方案.也许它会对某人有用..
[Run.cmd] - 可能需要更改powershell路径
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -nologo -noninteractive -command "C:\Scripts\RunBackup.ps1"
Run Code Online (Sandbox Code Playgroud)
[RunBackup.ps1] - Out-File没有达到预期的效果,也许有人可以找出原因?
C:\Scripts\SqlBackup.ps1 | Out-File "C:\Scripts\log.txt"
C:\Scripts\SVNBackup.ps1 | Out-File "C:\Scripts\log.txt"
C:\Scripts\Zip.ps1 | Out-File "C:\Scripts\log.txt"
Run Code Online (Sandbox Code Playgroud)
[SqlBackup.ps1] - 您可能需要修改加载的SMO程序集,具体取决于您的SQL Server版本.不要忘记设置$ instance和$ bkdir.
#http://www.mssqltips.com/tip.asp?tip=1862&home
$instance = ".\SQLEXPRESS"
[System.Reflection.Assembly]::LoadFrom("C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.SMO.dll") | out-null
[System.Reflection.Assembly]::LoadFrom("C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.SMOExtended.dll") | out-null
$s = new-object ("Microsoft.SqlServer.Management.Smo.Server") $instance
$bkdir = "c:\Backups" #We define the folder path as a variable
$dbs = $s.Databases
foreach ($db in $dbs)
{
if($db.Name -ne "tempdb") #We don't want to backup the tempdb database
{
$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_" + $dt + ".bak", "File")
$dbBackup.SqlBackup($s)
}
if($db.RecoveryModel -ne 3) #Don't issue Log backups for DBs with RecoveryModel=3 or SIMPLE
{
$dbname = $db.Name
$dt = get-date -format yyyyMMddHHmm #Create a file name based on the timestamp
$dbBackup = new-object ("Microsoft.SqlServer.Management.Smo.Backup")
$dbBackup.Action = "Log"
$dbBackup.Database = $dbname
$dbBackup.Devices.AddDevice($bkdir + "\" + $dbname + "_log_" + $dt + ".trn", "File")
$dbBackup.SqlBackup($s)
}
}
Run Code Online (Sandbox Code Playgroud)
[SVNBackup.ps1] - 修改仓库和备份路径
#set alias to svnadmin exe
set-alias svnadmin "C:\Program Files (x86)\CollabNet Subversion Server\svnadmin.exe"
#create dump
cmd.exe /c svnadmin dump "C:\Repo" `> "C:\Backups\svn.dmp"
#remove alias
remove-item alias:svnadmin
Run Code Online (Sandbox Code Playgroud)
[Zip.ps1] - 需要安装7zip,必要时修改7z.exe路径
#set alias to command line version of 7zip
set-alias sevenz "c:\program files\7-zip\7z.exe"
#Backups location
cd 'C:\Backups'
#rar the contents of the directory
$dt = get-date -format yyyyMMddHHmm #We use this to create a file name based on the timestamp
$outputFileName = "SQLSVNBackup$dt.7z"
$exclude1 = "-x!*.rar"
$exclude2 = "-x!*.7z"
sevenz a -t7z "$outputFileName" *.* "$exclude1" "$exclude2"
#find all .bak files in the immediate directory
dir '*.bak' | foreach-object{
#remove the bak file
remove-item $_.name
}
#find all .dmp files in the immediate directory
dir '*.dmp' | foreach-object{
#remove the dmp file
remove-item $_.name
}
#find all .trn files in the immediate directory
dir '*.trn' | foreach-object{
#remove the trn file
remove-item $_.name
}
#remove 7zip alias
remove-item alias:sevenz
Run Code Online (Sandbox Code Playgroud)
我使用GoodSync备份到WebDAV并安排了两个任务来运行.cmd文件,然后在异地同步/备份.
归档时间: |
|
查看次数: |
3679 次 |
最近记录: |