繁体   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