长期潜伏者,第一次海报。我希望这里有人能帮我一把,试图找出一个让我难倒的问题。本质上,我正在尝试编写一个Powershell脚本,该脚本将多部分SQL Server数据库还原到远程服务器。我已经弄乱了invoke-command
和script-block
功能,以至于我了解如何使用变量和参数......然而,我注意到一些非常有趣的行为。
这是我现在的代码:
cls
$strbaktest = "S:Landingtestdb1.bak,S:Landingtestdb2.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: 無法開啟備backup 裝置 'S:\Landing\testdb1.bak,S:\Landing\testdb2.bak'。操作系统错误 123(文件名、目录名或卷标语法不正确。
但是,如果我将相同的路径硬编码到脚本块中,它可以工作:
cls
$StrScrBlk = {Restore-SqlDatabase -ServerInstance "mydbserver" -Database testdb -BackupFile S:Landingtestdb1.bak,S:Landingtestdb2.bak -ReplaceDatabase}
invoke-command -ComputerName mydbserver -ScriptBlock $StrScrBlk
我注意到的另一件有趣的事情是,如果我只有一个文件要恢复,那么使用带有变量的第一种方法就可以了:
cls
$strbaktest = "S:Landingtestdb.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
希望这对某人有意义。我花了几个小时尝试了一堆不同的方法来让它工作 - 但我似乎无法弄清楚。任何帮助或建议不胜感激。
谢谢!
逗号是分隔数组元素的运算符或标识符。 比较:
PS C:> 1,2
1
2
PS C:> "1,2"
1,2
PS C:>
试试这个:
$strbaktest = "S:Landingtestdb1.bak","S:Landingtestdb2.bak"
它正在使用"x","c"。逗号不是必需的,因为它正在等待数组。