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

Другие вопросы по тегам