2016-06-15 3 views
1

Мы недавно начали использовать Sql server 2012 SP3 и построили SQL-сервер 2012 с использованием сценария powershell. В нашей автоматизации есть требование запустить несколько сценариев БД на db, и я нашел Invoke-Sqlcmd очень надежным, пока не нашел эту проблему. Когда я запускаю Invoke-sqlcmd с соответствующим набором параметров в режиме отладки powershell в Системе, на которой недавно установлен SQL-сервер. У меня нет проблем. PowershellCommand: Invoke-Sqlcmd -InputFile $ sStrJBSPExecRolePath -ServerInstance $ sStrSQLName -ErrorAction Стоп Но когда я выполнить тот же запрос через сценарий автоматизации PowerShell после восстановления же сервера я в конечном итоге получить под ошибкойInvoke-Sqlcmd 'не распознается как имя командлета

Термин " Invoke-Sqlcmd 'не распознается как имя командлета, функции, файла сценария или исполняемой программы. Проверьте правильность написания имени или, если включен путь, проверьте правильность пути и повторите попытку.

Я сделал онлайн-исследований многие предложили импортировать sqlps и т.д. поэтому для тестирования я добавил ниже в моем сценарии

получить-PSSnapin -registered Import-Module «sqlps» -DisableNameChecking

Даже после добавления выше в скрипте. Я все еще получаю ту же ошибку. Но когда я запускаю тот же скрипт вручную, он работает отлично. Я не мог понять, что может быть неправильным. сценарий автоматизации powershell - этот скрипт устанавливает .NET Framework 3.5, SQL Server 2012, SQL Server 2012 SP3, а затем загружает сборку smo, которую я использую для изменения настроек sql, таких как ограничение максимальной памяти SQL.

+0

рассмотреть размещение вашего сценария. возможно, вы запускаете его как локальную систему, когда он терпит неудачу? –

+0

Да, служба SQL Server работает под локальной системой. Но когда я запускаю powershell вручную в режиме отладки, он запускается без каких-либо проблем. уверен я могу поставить часть сценария $ sStrSQLName = $ ENV: COMPUTERNAME $ sStrSPWIAFilePath = «D: \ _ ИСД \ Установка \ Scripts \ SQL_Install \ Scripts \ SQL sp_WhoIsActive.sql " Invoke-Sqlcmd -InputFile $ sStrSPWIAFilePath -ServerInstance $ sStrSQLName -ErrorAction Stop – Gau

+0

вы запускаете сценарий как часть автоматизированного процесса, и это когда вы видите сбой? Профиль пользователя может не совпадать с профилем пользователя, который используется, когда вы видите сбой. Можете ли вы использовать RUNAS или PSEXEC для запуска сеанса в контексте пользователя, где ваш скрипт терпит неудачу. В качестве альтернативы вы можете запустить свой процесс с вашими учетными данными, если он работает для вас. –

ответ

0

Это не полное решение, а работа, которая работает для меня. вы можете попробовать.

при выполнении запроса от автоматизации пользователь, который выполняет, который не имеет доступа к sqlcmd , выполнит команду для каталога, в котором присутствует ваш sqlcmd.exe. просто положил CD "C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn".

Чтобы получить местоположение для sqlcmd, найдите местоположение SQLCMD.exe в поле поиска. Если не найдено, вам необходимо установить, что его нет, но в вашем случае я думаю, что он присутствует, просто нужно правильно установить его местоположение.

Также вам понадобится установить переменную пути для пользователя, выполняющего сценарий автоматизации, иначе он будет распознавать только sqlcmd, но не выполнит это.

$env:Path += ";C:\Program Files (x86)\Microsoft SQL Server\130\DTS\Binn\" 

вы можете получить этот путь из локального пользователя, для которого он работает на $Env:Path

надеюсь, что это работает

Смежные вопросы