2014-11-18 5 views
1

긴 시간 lurker, 처음 포스터. 나는 여기 누군가가 나를 곤란하게 만든 문제를 알아 내려고 노력하고 있기를 바라고있다. 본질적으로 원격 서버에 다중 부분 SQL Server 데이터베이스를 복원하는 Powershell 스크립트를 작성하려고합니다. 변수와 매개 변수를 사용하는 방법을 이해하는 시점에서 invoke-commandscript-block 기능을 사용하고 있습니다. 그러나 매우 흥미로운 동작을 발견했습니다. 내 스크립트 블록에 동일한 경로를 하드 코딩하는 경우, 작동, 그러나Powershell 및 스크립트 블록을 사용하여 원격 Microsoft SQL Server 데이터베이스 복원

System.Data.SqlClient.SqlError: Cannot open backup device 'S:\Landing\testdb1.bak,S:\Landing\testdb2.bak'. Operating system error 123(The filename, directory name, or volume label syntax is incorrect.).

:

이이 같은 오류를 얻을 수

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 

: 여기

지금 내 코드입니다
cls 
$StrScrBlk = {Restore-SqlDatabase -ServerInstance "mydbserver" -Database testdb -BackupFile S:\Landing\testdb1.bak,S:\Landing\testdb2.bak -ReplaceDatabase} 
invoke-command -ComputerName mydbserver -ScriptBlock $StrScrBlk 

내가 알아챈 또 다른 흥미로운 점은 복원 할 단일 파일 만있는 경우 처음 만났을 때 변수가있는 hod가 작동합니다.

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 

희망적으로 이것은 누군가에게 의미가 있습니다. 나는 이것을 작동시키기 위해 여러 가지 방법을 시도하면서 몇 시간을 보냈습니다. 그러나 그것을 이해하는 것처럼 보이지는 않습니다. 도움이나 조언을 주시면 감사하겠습니다.

감사합니다.

답변

0

쉼표는 배열의 요소를 구분하는 연산자 또는 식별자입니다. 비교 :

PS C:\> 1,2 
1 
2 
PS C:\> "1,2" 
1,2 
PS C:\> 

이 시도 :

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

이봐, 덕분에 나에게 다시 얻기를 위해 - 나는 그것을 감사드립니다. 나는 당신의 제안을 시도했다. 그러나 그것은 파일 경로에서 쉼표를 완전히 제거한다. 나는 거기에 있기 위해 쉼표가 필요하다. –