长期潜伏者,第一次海报。我希望这里有人可以帮我解决一个让我难过的问题。本质上,我正在尝试编写一个 Powershell 脚本,它将多部分 SQL Server 数据库恢复到远程服务器。我已经弄乱了invoke-command
和script-block
功能,以至于我了解如何使用变量和参数......但是我注意到一些非常有趣的行为。
这是我现在的代码:
cls
$strbaktest = "S:\Landing\testdb1.bak,S:\Landing\testdb2.bak"
echo "The backup files are $strbaktest"
write-host
$StrScrBlk = {param($StrBaktest); &Restore-SqlDatabase -ServerInstance "mydbserver" -Database testdb -BackupFile $strbaktest -ReplaceDatabase}
invoke-command -ComputerName mydbserver -ScriptBlock $StrScrBlk -argumentlist $strbaktest
这会产生如下错误:
System.Data.SqlClient.SqlError: 无法打开备份设备“S:\Landing\testdb1.bak,S:\Landing\testdb2.bak”。操作系统错误 123(文件名、目录名或卷标语法不正确。)。
但是,如果我将相同的路径硬编码到我的脚本块中,它可以工作:
cls
$StrScrBlk = {Restore-SqlDatabase -ServerInstance "mydbserver" -Database testdb -BackupFile S:\Landing\testdb1.bak,S:\Landing\testdb2.bak -ReplaceDatabase}
invoke-command -ComputerName mydbserver -ScriptBlock $StrScrBlk
我注意到的另一件有趣的事情是,如果我只有一个文件要恢复,使用第一种方法和变量可以工作:
cls
$strbaktest = "S:\Landing\testdb.bak"
echo "The backup files are $strbaktest"
write-host
$StrScrBlk = {param($StrBaktest); &Restore-SqlDatabase -ServerInstance "mydbserver" -Database testdb -BackupFile $strbaktest -ReplaceDatabase}
invoke-command -ComputerName mydbserver -ScriptBlock $StrScrBlk -argumentlist $strbaktest
希望这对某人有意义。我花了几个小时尝试了很多不同的方法来让它工作——但我似乎无法弄清楚。任何帮助或建议表示赞赏。
谢谢!