У меня есть сценарий, очень похожий на ваш, с некоторыми примечательными отличиями:
- Перед вызовом
SqlRestore
я звоню $server.KillAllProcesses($databaseName)
. - У меня есть
$smoRestore.NoRecovery = $false
вместо $true
- У меня есть
$smoRestore.FileNumber = 1
, которого у вас нет совсем.Я думаю, что это соответствует проверке файла из набора резервных копий в графическом интерфейсе.
У меня также есть аналогичный код для установки логических / физических имен файлов, но вместо использования $server.Information
я извлекаю информациюиз реестра (не уверен, что "лучше").Еще одно отличие состоит в том, что я использую $smoRestore.ReadFileList
вместо $smoRestore.ReadBackupHeader
.
Вы также можете попробовать использовать несколько операторов Write-Host
на ваших путях, чтобы убедиться, что они выглядят правильно, если вы еще этого не сделали.
Надеюсь, что один из перечисленных твиков решит вашу проблему.Дайте мне знать, если вам нужна дополнительная информация из моего сценария.