簡體   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