1

久しぶりの潜伏者、初めてのポスター。ここにいる誰かが、私が困惑している問題を解決しようとして手を貸してくれることを願っています. 基本的に、マルチパート SQL Server データベースをリモート サーバーに復元する Powershell スクリプトを作成しようとしています。変数とパラメーターの使用方法を理解するまで、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

私が気付いたもう1つの興味深い点は、復元するファイルが1つしかない場合、変数を使用した最初の方法を使用すると機能することです。

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

うまくいけば、これは誰かにとって意味があります。これを機能させるためにさまざまな方法を試すのに数時間を費やしましたが、理解できないようです。ヘルプやアドバイスをいただければ幸いです。

ありがとう!

4

1 に答える 1