簡體   English   中英

SQL 在任務計划程序中使用 powershell 進行服務器備份

[英]SQL Server backup using powershell in Task scheduler

我正在使用 PowerShell 備份 SQL 服務器數據庫並使用 Windows 任務計划程序來安排腳本

測試

  1. 手動運行腳本,它有效。
    SQL 服務器備份文件 ( test.bak ) 和測試文件 ( HelloWorld.txt ) 均已創建。

  2. 通過 Windows 任務調度程序運行,只創建了HelloWorld.txt ,沒有創建 SQL 服務器備份文件。

至少如此;

  1. PowerShell 腳本確實運行了。
  2. 憑據可以手動運行

問題

為什么從 Windows 任務計划程序運行時沒有創建 SQL SErver 備份文件?

這是我的SQLbackup.ps1文件:

$credential = import-clixml -path c:\pp\test\sqlcred.xml
Backup-SqlDatabase -ServerInstance Server264\SUPPORT2K19 -Database PPTest -BackupAction Database -BackupFile "C:\PP\Test\Test.bak" -Credential $credential

Set-Content -Path "C:\PP\Test\HelloWorld.txt" -Value "Hello World"

任務計划程序設置為:

  • 用戶是SYSTEM,
  • Select 無論用戶是否登錄都運行
  • Tick 以最高權限運行

在操作選項卡中:

  • 程序:powershell
  • 添加arguments: -executionpolicy bypass -file C:\PP\Test\sqlbackup.ps1

為什么沒有創建 SQL 服務器備份文件的任何建議?

我認為 cmdlet Backup-SqlDatabase會產生錯誤,而您沒有捕獲該錯誤的機制。

嘗試實現try/catch來捕獲錯誤,然后您可以使用該信息執行您想要的操作,例如:

$credential = import-clixml -path c:\pp\test\sqlcred.xml
try {
    Backup-SqlDatabase -ServerInstance Server264\SUPPORT2K19 -Database PPTest -BackupAction Database -BackupFile "C:\PP\Test\Test.bak" -Credential $credential -ErrorAction Stop
}
catch {
    Set-Content -Path "C:\PP\Test\Error.txt" -Value "$_"
}
Set-Content -Path "C:\PP\Test\HelloWorld.txt" -Value "Hello World"

這將捕獲潛在的error並將其寫入Error.txt文件,與HelloWorld.txt相同。

重要的部分是Try/Catch僅捕獲終止錯誤,因此我們在 cmdlet 的末尾添加-ErrorAction Stop以使任何錯誤終止,以便我們可以在catch腳本塊中執行腳本。

您可以在 Microsoft 文檔中閱讀更多相關信息: https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_try_catch_finally?view=powershell-7.2

PS 該文檔適用於 Powershell 7.2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM