从批处理文件返回值到powershell

时间:2016-06-02 20:52:33

标签: windows powershell batch-file return-value

我有一个批处理文件,它调用SQL脚本来发送电子邮件。此批处理文件嵌入在PowerShell中。如何将批处理文件中的成功或失败返回代码返回到PowerShell。我试过以下

在批处理文件中

exit /b %ERRORLEVEL%

在powershell中

cmd.exe /c 'C:\scripts\send_email_sp_prd.bat F'
if($LastExitCode -eq -0){
write-host "Success"
}
else
{
write-host "Failure"
}

即使SQL脚本失败,批处理文件也会返回0的值,这不是我想要的。有没有更好/更正确的方法呢?

2 个答案:

答案 0 :(得分:1)

我不确定你的帖子是否是脚本,逐字,但你有一个 - 在0之前。尝试将 if 块的第一行更改为 $ LastExitCode -eq 0

if($LastExitCode -eq 0){
   write-host "Success"
}
else
{
   write-host "Failure"
}

答案 1 :(得分:1)

就个人而言,我会删除批处理文件并通过PowerShell执行此操作,这在操作或验证命令输出方面会更容易。在SQL Management Studio的安装程序上,在功能选择安装"管理工具"获取PowerShell模块。安装模块后,您可以创建一个脚本来执行您的工作。这是我快速创建的东西,但你可以使用这个或类似的东西:

Function Invoke-Sqljob {

[CmdletBinding()]
param(
    [Parameter(Mandatory=$true)]
    [String[]] $ServerInstance,

    [Parameter(Mandatory=$true)]
    [String[]] $DatabaseName,

    [Parameter(Mandatory=$true)]
    [String[]] $Query
     )

Import-Module SQLPS

Invoke-Sqlcmd -ServerInstance "$ServerInstance" -Database "$DatabaseName" -Query "$Query"

}

您将按如下方式执行Invoke-Sqljob:

Invoke-Sqljob -ServerInstance "DB_Server\SQL_Instance" -Database "DB_Name_Here" -Query "EXEC send_mail_sp_prd"

如果您不能或不想使用sql身份验证,则可以使用Invoke-Sqlcmd cmdlet的-Username和-Password参数。

希望这有助于解决您的问题。