powershell $ LastExitCode -1073741502调用osql或sqlcmd时

时间:2012-01-04 14:02:36

标签: powershell sqlcmd osql

我编写了一个powershell脚本来调用sqlcmd.exe来对远程sql server执行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)       {           抛出“脚本失败。返回代码是$ LASTEXITCODE。”       }

失败的看似随意的性质导致了很多痛苦。我无法确定错误是SQL2008,SQLCMD(虽然我得到与osql.exe相同的行为)或以某种方式耦合到powershell。

sqlcmd正在执行的实际sql似乎与问题无关,因为sql脚本会执行ok一段时间然后失败。

许多不同的工作站和服务器(Win7,Win2003和Win2008)都出现了相同的故障

非常感谢任何关于如何追踪此事的指导。

2 个答案:

答案 0 :(得分:1)

如果您使用的是Powershell,请不要使用sqlcmd和命令行!

V2中有非常好的内置工具,可以让您与SQL Server进行更强大的交互,并且不要求您解析返回代码的文本以检查错误 - 它们实际上会返回正确的错误代码。

Here's a technet article on Invoke-SQLCmd

请记住,您需要先加载snapins:

Add-PSSnapin SqlServerProviderSnapin100
Add-PSSnapin SqlServerCmdletSnapin100

答案 1 :(得分:0)

实际上解释了根本原因elsewhere on here

退出代码-1073741502的格式为0xC0000142(status_dll_init_failed)。 Microsoft的KB2701373解决了Console.WriteMicrosoft.powershell.consolehost.dll提出的漏洞句柄。

旁注:一些"修复"在Internet上涉及做不同的事情,然后重新启动PowerShell。然而,PowerShell的实际重启是解决问题的原因(暂时)