【发布时间】:2021-03-14 16:57:14
【问题描述】:
我需要创建一个 PowerShell 脚本,它将每月从 PROD 服务器复制我的备份文件以在 DEV 服务器上恢复它。然后我需要通过两个步骤创建一个 SQL 代理作业。第一步是将这些复制的文件恢复到 DEV 服务器上。第二步是执行一个 SP 来清理冗余/不一致的数据。
到目前为止,这是我创建的脚本
# begin set vars
$BackupDir = "C:\SQL Installs\Backups\Full Backups\Sample_full.bak" # where backups are stored
$WorkDir = "C:\SQL Installs\Backups\Test Backups" # where you are copying backup to
# end set vars
Set-Location $WorkDir
$LatestBackupFileName = (Get-ChildItem $BackupDir\*.bak | sort LastWriteTime | select -last 1)
Copy-Item $LatestBackupFileName -Destination $WorkDir\AutomatedDbRefresh.bak -Force
这是结果输出 - 显示路径为空。
Set-Location $WorkDir
$LatestBackupFileName = (Get-ChildItem $BackupDir\*.bak | sort LastWriteTime | select -last 1)
Copy-Item $LatestBackupFileName -Destination $WorkDir\AutomatedDbRefresh.bak -Force
Copy-Item : Cannot bind argument to parameter 'Path' because it is null.
At line:8 char:11
+ Copy-Item $LatestBackupFileName -Destination $WorkDir\AutomatedDbRefr ...
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [Copy-Item], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.CopyItemCommand
有人可以就如何避免此错误以及我可能需要在脚本中修复什么提出建议吗?
【问题讨论】:
-
听起来备份目录中没有
*.bak文件。将Copy-Item命令包装在条件中,如下所示:if($LatestBackupFilename){ Copy-Item ... } -
我认为这不是问题,因为备份位置中有一个 .bak 文件。它指出错误位于第 8 行 -
Copy-Item $LatestBackupFileName -Destination $WorkDir\AutomatedDbRefresh.bak -Force
标签: sql-server windows powershell powershell-2.0