Invoke-sqlcmd для проблемы с удаленным сервером: не удалось найти файл
Я пытаюсь написать сценарий PowerShell, который будет выполнять запрос tsql только к одному удаленному серверу, используя invoke-sqlcmd. Эти tsql-запросы просты: резервное копирование / восстановление базы данных, создание пользователя и т. Д. Ниже приводится его выдержка:
# 5 # Create clientdb database on secondary server by restoring the full backup for primary
Try {
Invoke-sqlcmd -ServerInstance 'REMOTESQLSRV'`
-Username 'ts_sql' -Password 'somepassword'`
-InputFile "$LScltid\__01_On_Secondary_CreateDB2_srv2.sql"`
-ErrorAction Stop
Write-Host " clt_$id is now restored to secondary server "`
-ForegroundColor White -BackgroundColor Green
} Catch {
Write-Host " Restore operation for clt_$id did not succeed. Check the error logs " -ForegroundColor Black -BackgroundColor Red
}
Мои сценарии всегда ломаются здесь. По ряду причин, по которым я не мог разобраться, invoke-sqlcmd не использует переменную "$LScltid" для определения пути, по которому будет найден скрипт.sql.
Каждый раз, когда мне приходилось его запускать, он менял текущий каталог на SQLERVER:\ provider или другой, вызывая сбой скрипта на этом шаге.
Я делаю это правильно? Если так, как я должен адаптировать команду для выполнения так, как я ожидаю?
ОБНОВЛЕНИЕ Забыл упомянуть, что если я запустил скрипт с жестко запрограммированными значениями переменных, я смогу получить нужный мне результат (в данном случае восстановление базы данных с устройства).
Спасибо за ваши отзывы.
1 ответ
Странно, команда сейчас работает. Я действительно не знаю, что я сделал неправильно раньше, но сейчас работает точно такая же команда. Просто головы для тех, кто сталкивается с той же проблемой:
Если вы должны использовать Invoke-Sqlcmd
в ваших сценариях остерегайтесь смены провайдера, особенно если команды приходят после Invoque-Sqlcmd
являются постоянными (получить, установить, скопировать, новые и т. д.). В моем случае где-то в моем сценарии между Invoke-sqlcmd
Команды мне пришлось копировать файлы с локального на удаленный сервер. Каждый раз, когда команда терпела неудачу, потому что поставщик изменился. В качестве обходного пути я set-location
до copy-item
выполнение команды и этот маневр, казалось, добились цели (не знаю, жестко ли это переназначено.
Спасибо Stackru Team