繁体   English   中英

从批处理文件返回值到Powershell

[英]Return value from batch file to powershell

我有一个批处理文件,该文件调用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值,这不是我想要的值。 有没有更好/正确的方法来做到这一点?

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

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

就个人而言,我将消除批处理文件,并通过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参数。

希望这可以帮助您解决问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM