我对powershell完全陌生,我需要一些帮助才能开始。我需要的是写一个备份SQL数据库的小脚本,但每次都有不同的名称(只保留最近的4-5个版本)。现在我有一个BAT,它只使用sql脚本启动osql,如下所示
REM BAT file starts here
"C:\Program Files\Microsoft SQL Server\90\Tools\Binn\osql.exe" -S myServer -E -iC:\Scripts\backupDB.sql
备份脚本是
BACKUP DATABASE [MyDB] TO DISK = N'C:\Backup\MyDB.bak' WITH NOFORMAT, INIT, NAME = N'MyDB-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
此BAT由任务调度程序运行。显然,它不会创建不同的数据库备份文件。我想要的是用powershell脚本替换整个东西,它将在目标目录中查找并只保留最后N个备份文件(从最新的开始),然后生成一个备份文件名,如下所示
MyDB-yy.mmdd.hhmmss.bak
和备份在那里。
我可以创建一个简单的C#控制台应用程序来做到这一点,但我想开始使用Powershell进行测试。
任何帮助都是非常感谢的。
谢谢
发布于 2009-11-11 00:07:26
像这样的东西应该是有效的:
if (Test-Path C:\Backup\MyDB.bak)
{
Rename-Item C:\Backup\MyDB.bak `
("C:\Backup\MyDB-{0:yy.MMdd.hhmmss}.bak" -f (get-date))
}
Get-ChildItem C:\Backup\MyDB-*.bak | Sort Name -Desc | Select -skip 5 |
Remove-Item
$osql = "C:\Program Files\Microsoft SQL Server\90\Tools\Binn\osql.exe"
& $osql -S myServer -E -iC:\Scripts\backupDB.sql
发布于 2009-11-11 18:50:45
或者,您可以跳过.sql文件,执行以下操作。也可以使用SMO来完成,但是既然您提到了C#,这对您来说可能更有意义。
$datePart = Get-Date -Format "yy.MMdd.HHmmss"
$oConn = New-Object System.Data.SqlClient.SqlConnection("Server=myServer;Database=master;Integrated Security=True")
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.Connection = $oConn
$oConn.Open()
$SqlCmd.CommandText = "BACKUP DATABASE [MyDB] TO DISK = N'C:\Backup\MyDB-$datePart.bak' WITH NOFORMAT, INIT, NAME = N'MyDB-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10"
$SqlCmd.ExecuteNonQuery()
$oConn.Close()
https://stackoverflow.com/questions/1711053
复制相似问题