0
SqlPsモジュールから「Restore-SqlDatabase」を呼び出すPowershell関数があり、スプラットを介して関数にパラメータを送信しています。なぜ私はそれが期待通りに動作していないのか理解しようとしています。私のコードは次のとおりです:powershell関数を呼び出し、スプラットを使用してパラメータを送信する
$SqlParams = @{"ServerInstance"="'$ServerName'";
"Database"="'$DatabaseName'";
"BackupFile"="'$BackupFile'";}
if($Credential -ne $null) {
$SqlParams.Add("SqlCredential", $Credential)
}
if($ReplaceDatabase) {
$SqlParams.Add("ReplaceDatabase", $null)
}
try { $PathResult = Test-Path -Path $RestorePath } catch { $PathResult = $False }
if($PathResult) {
Write-Verbose "RestorePath exists, using: $RestorePath"
$RelocateData = New-Object 'Microsoft.SqlServer.Management.Smo.RelocateFile, Microsoft.SqlServer.SmoExtended, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91'
$RelocateData.LogicalFileName = $DatabaseName
$RelocateData.PhysicalFileName = $(Join-Path -Path $RestorePath -ChildPath "$DatabaseName.mdf")
$RelocateLog = New-Object 'Microsoft.SqlServer.Management.Smo.RelocateFile, Microsoft.SqlServer.SmoExtended, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91'
$RelocateLog.LogicalFileName = "$DatabaseName`_log"
$RelocateLog.PhysicalFileName = $(Join-Path -Path $RestorePath -ChildPath "$DatabaseName`_log.ldf")
$RelocateFile = @($RelocateData,$RelocateLog)
$SqlParams.Add("RelocateFile", $RelocateFile)
}
try{
Write-Verbose "Using the following parameters:"
$paramString = $SqlParams | Out-String
Write-Verbose $paramString
Restore-SqlDatabase @SqlParams
} catch {
Write-Error $_
Write-Output "Restore failed..."
return
}
Write-Output "Database successfully restored!"
これを実行すると、データベースに接続できません。しかし、ターミナルで "param"ハッシュテーブルと同じパラメータ値を使用してコマンドを直接実行すると、期待どおりに動作します。
私のためのヒント?
あなたが得る正確なエラーは何ですか? '$ Error'リストの内容は何ですか? 'Restore-SqlDatabase'によって報告された欠落/指定されていないパラメータがありますか? –
次のエラーが表示されます: 'パラメータ 'DatabaseObject'の引数を検証できません。引数がnullまたは空です。 nullまたは空でない引数 を指定してから、コマンドを再試行してください。 行目:1文字:1' これは、 '$ Error'リストで重要なのは –
です。一重引用符を削除しようとしましたが、助けになりませんでした。 '$ SqlParams = @ {" ServerInstance "= $ ServerName; "データベース" = $ DatabaseName; "BackupFile" = $ BackupFile; } ' –