powershell $LastExitCode -1073741502 при вызове osql или sqlcmd

Я написал сценарий 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 ответа

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

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

Вот техническая статья на Invoke-SQLCmd

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

Add-PSSnapin SqlServerProviderSnapin100
Add-PSSnapin SqlServerCmdletSnapin100

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

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

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

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