powershell $ LastExitCode -1073741502 при вызове osql или sqlcmd - PullRequest
3 голосов
/ 04 января 2012

Я написал сценарий powershell для вызова sqlcmd.exe для выполнения сценария sql на удаленном сервере sql. Сценарий powershell проверяет $ LASTEXITCODE. Если $ LASTEXITCODE не равен нулю, я выкидываю «Сценарий не выполнен. Код возврата - $ LASTEXITCODE.»

Этот сценарий используется несколько раз для выполнения различных сценариев sql и является частью цепочки сценариев powershell, запускаемых во время развертывания.

Сценарий в большинстве случаев работает нормально, но случайно завершается с кодом возврата -1073741502 .

Это начало происходить только после обновления до SQL2008, и я не могу воспроизвести его, запустив один сценарий powershell вручную или сценарий sql cmd вручную.

Это команда powershell:

& 'sqlcmd.exe' -S $ databaseServer -r -b -E -i '$ scriptFullPath'

if ($ LASTEXITCODE -ne 0) { throw "Сценарий не выполнен. Код возврата - $ LASTEXITCODE." }

Казалось бы, случайный характер неудачи вызывает много боли. Я не могу определить, является ли ошибка SQL2008, SQLCMD (хотя я получаю такое же поведение с osql.exe) или каким-то образом связана с powershell.

Фактический sql, который выполняет sqlcmd, похоже, не связан с проблемой, поскольку сценарий sql некоторое время будет работать нормально, а затем завершится ошибкой.

Одна и та же ошибка наблюдалась на многих рабочих станциях и серверах (Win7, Win2003 и Win2008)

Будем весьма благодарны за любые указания о том, как отследить это.

Ответы [ 2 ]

1 голос
/ 04 января 2012

Не используйте sqlcmd и командные строки, если вы используете Powershell!

В V2 есть очень хорошие встроенные инструменты, которые обеспечивают более надежное взаимодействие сSQL Server, и не требуют, чтобы вы анализировали текст кодов возврата для проверки на наличие ошибок - они действительно возвращают правильные коды ошибок.

Вот статья Technet по Invoke-SQLCmd

Помните, что сначала вам нужно загрузить оснастки:

Add-PSSnapin SqlServerProviderSnapin100
Add-PSSnapin SqlServerCmdletSnapin100
0 голосов
/ 29 октября 2014

Коренная причина на самом деле объясняется в другом месте здесь

Код выхода -1073741502 - это 0xC0000142 в шестнадцатеричном формате (status_dll_init_failed). Microsoft KB2701373 обращается к утечкам, сделанным Console.Write в Microsoft.powershell.consolehost.dll.

Примечание: Некоторые «исправления» в Интернете предполагают что-то другое, затем перезапуск PowerShell. Тем не менее, фактический перезапуск PowerShell - это то, что решает проблему (временно)

...