powershell - SQL Server 使用任务计划程序中的 powershell 备份

我正在使用 PowerShell 备份 SQL Server 数据库并使用 Windows 任务调度程序来调度脚本

测试

  1. 手动运行脚本,它可以工作。

    SQL Server 备份文件 (test.bak) 和测试文件 (HelloWorld.txt) 均已创建。

  2. 通过 Windows 任务计划程序运行,仅创建了 HelloWorld.txt,未创建 SQL Server 备份文件。

至少是这样;

  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,
  • 选择运行用户是否登录
  • 以最高权限运行

在操作选项卡中:

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

为什么没有创建 SQL Server 备份文件的任何建议?

回答1

我认为 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://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_try_catch_finally?view=powershell-7.2

附言该文档适用于 Powershell 7.2

相似文章

随机推荐

最新文章