【问题标题】:PowerShell- copy item cannot bind argument to parameter 'path' because it is nullPowerShell-复制项无法将参数绑定到参数“路径”,因为它为空
【发布时间】: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


【解决方案1】:

这似乎是因为 $BackupDir 引用的是文件而不是文件夹。

$BackupDir = "C:\SQL Installs\Backups\Full Backups\Sample_full.bak"。 为了使它工作 $BackupDir 需要类似于 $BackupDir = "C:\SQL Installs\Backups\Full Backups" 完成此操作后,您应该能够使这条线正常工作。
$LatestBackupFileName = (Get-ChildItem $BackupDir*.bak | sort LastWriteTime | select -last 1)

【讨论】:

  • 要对此进行扩展,您可以使用当前代码自行测试, $LatestBackupFileName -eq $null 将在评估后评估为 true。但是,如果您将 $BackupDir 更改为文件夹而不是文件,您应该会看到 $LatestBackupFileName -eq $null 评估为 false。
  • 没问题,多德。如果它是正确的,你能留下那个复选标记吗
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-09
  • 2017-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多