2016-01-22 103 views
0

我試圖通過編寫一個Powershell腳本來獲取參數,並將其轉換爲需要在部署前後進行備份的多個SQL Server數據庫的備份腳本,以幫助我的系統管理員。Powershell更改SQL Server的備份腳本

我會非常願意讓他輸入這些PARAMS:

@Database = 'Genesis' 
@BackupName = 'Genesis_backup' 
@BackupDate = '2016_01_20' 
@BackupDateTime = '2016_01_20_01340_3181013' 
@Location = 'E:\SQLBackup\TEST' 

因此,如果這是備份串

BACKUP DATABASE [@Database] TO DISK = N'E:\SQLBackup\TEST - 20160120\Genesis_backup_2016_01_20_01340_3181013.bak' WITH NOFORMAT, NOINIT, NAME = N'Genesis_backup_2016_01_20_01340_3181013', SKIP, REWIND, NOUNLOAD, COMPRESSION, STATS = 10 
GO 

我想PowerShell來構建它看起來像

BACKUP DATABASE [Genesis] TO DISK = N'@Location - @BackupDate\@[email protected]' WITH NOFORMAT, NOINIT, NAME = N'@[email protected]', SKIP, REWIND, NOUNLOAD, COMPRESSION, STATS = 10 
GO 

我該如何開始這樣的事情?你會推薦我使用哪些功能?另外我該如何動態解析位置?

回答

0

有兩種方法:使用直接TSQL(受DBA人羣青睞)或使用Sql Server的SMO API(更多Powershell-ish,模擬SSMS嚮導)。由於許多DBA人員更熟悉TSQL,因此獲取TSQL路徑的幫助更容易。

而不是滾動自己的解決方案,一種流行的方法是使用Ola Hallengren的maintenance solution其中包括嘗試和真正的備份程序。 Ola的解決方案使用Sql Server Agent作業進行調度,因此Sql Express需要使用Task Scheduler。使用Ola的東西,只需創建備份您想要的數據庫的代理作業。代理作業可以通過執行sp_start_job sproc啓動。這可以通過sqlcmd或Powershell的Invoke-SqlCmd來完成。

+0

感謝您的回覆。我只想建立一些字符串。把事情簡單化。他不是DBA ......我不想從SSMS之外運行它。我只想讓他能夠打開SSMS並在那裏播放我的腳本的結果。更新的問題,以顯示我迄今爲止所做的。 – Hituptony