Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用Powershell和脚本块进行远程Microsoft SQL Server数据库还原_Sql Server_Powershell_Invoke Command_Scriptblock - Fatal编程技术网

Sql server 使用Powershell和脚本块进行远程Microsoft SQL Server数据库还原

Sql server 使用Powershell和脚本块进行远程Microsoft SQL Server数据库还原,sql-server,powershell,invoke-command,scriptblock,Sql Server,Powershell,Invoke Command,Scriptblock,长期潜伏者,第一次海报。我希望这里有人能帮我找出一个让我困惑的问题。基本上,我正在尝试编写一个Powershell脚本,将由多部分组成的SQL Server数据库恢复到远程服务器。我把invoke命令和script块功能搞得一团糟,我知道如何使用变量和参数。。。然而,我注意到一些非常有趣的行为 这是我现在的代码: cls $strbaktest = "S:\Landing\testdb1.bak,S:\Landing\testdb2.bak" echo "The backup files are

长期潜伏者,第一次海报。我希望这里有人能帮我找出一个让我困惑的问题。基本上,我正在尝试编写一个Powershell脚本,将由多部分组成的SQL Server数据库恢复到远程服务器。我把
invoke命令
script块
功能搞得一团糟,我知道如何使用变量和参数。。。然而,我注意到一些非常有趣的行为

这是我现在的代码:

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:无法打开备份设备的:\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
希望这对某些人来说是有意义的。我花了几个小时尝试了一系列不同的方法来实现这一点,但我似乎无法理解。任何帮助或建议都将不胜感激


谢谢

逗号是分隔数组元素的运算符或标识符。比较:

PS C:\> 1,2
1
2
PS C:\> "1,2"
1,2
PS C:\>
试试这个:

$strbaktest = "S:\Landing\testdb1.bak","S:\Landing\testdb2.bak"

它与“x”、“c”一起工作。逗号不是必需的,因为它正在等待数组。

嘿,谢谢你回复我-我很感激。我尝试了你的建议,但是它完全删除了文件路径中的逗号。。。我需要逗号在里面。