2015-08-27 230 views
0

我們在經典ASP頁面中使用vbscript,並在該vbscript中使用Wscript調用Powershell。我想檢查回報,因爲它是爲了告訴我Powershell是否成功完成。我在Powershell腳本中有一個返回值。我已經嘗試了objShell.Run和objShell.Exec,並且都沒有讓Powershell返回值通過我的ASP頁面。使用Wscript運行powershell腳本的vbscript - 需要從powershell返回

我的問題:如何從Powershell獲取返回值?

的VBScript如下:

'call PowerShell script with filename and printername and scriptname 
strScript = Application("EnvSvcsPSScript") 
Set objShell = CreateObject("Wscript.Shell") 
dim strCommand 
strCommand = "powershell.exe -file " & strScript & " " & strFileName & " " & strPrinterName 
Set strPSReturn = objShell.Run(strCommand, 0, true) 

response.Write("return from shell: " & strPSReturn.StdOut.ReadAll & "<br>") 
response.Write("return from shell: " & strPSReturn.StdErr.ReadAll & "<br>") 

PowerShell腳本:

$FileName = $args[0] 
$PrinterName = $args[1] 
$strReturn = "0^Successful" 

"Filename: " + $FileName 
"Printer: " + $PrinterName 

try 
{ 
get-content $FileName | out-printer -name $PrinterName 
[gc]::collect() 
[gc]::WaitForPendingFinalizers() 
} 
catch 
{ 
    $strReturn = "1^Error attempting to print report." 
} 
finally 
{ 

} 
return $strReturn 

THANK YOU!

回答

0

您可以檢查您的PowerShell腳本是否成功。看看這個例子。

PowerShell腳本:

$exitcode = 0 
try 
{ 
    # Do some stuff here 
} 
catch 
{ 
    # Deal with errors here 
    $exitcode = 1 
} 
finally 
{ 
    # Final work here 
    exit $exitcode 
} 

VB腳本:

Dim oShell 
Set oShell = WScript.CreateObject ("WScript.Shell") 
Dim ret 
ret = oShell.Run("powershell.exe -ep bypass .\check.ps1", 0, true) 
WScript.Echo ret 
Set oShell = Nothing 

現在,如果你運行的VB腳本,你會得到0,如果PowerShell腳本成功,否則爲1。 但是,這種方法不會讓你得到0或1以外的退出代碼。

+0

嘗試了什麼已提供,但是,當我嘗試使用「WScript.Echo ret」顯示返回值時出現以下錯誤:microsoft vbscript運行時錯誤'800a01a8'所需的對象'' – LReeder14

+0

@ user3567046 VBScript代碼太短,我不知道會出現什麼問題。 我唯一的猜測是缺少的對象是'oShell',並且'Set oShell = WScript.CreateObject(「WScript.Shell」)中有一些''也許是一個錯字? 請仔細檢查您的代碼或提供完整的命令和代碼清單。 – Emons