2012-01-04 18 views
2

私はVBScriptからPSスクリプトを実行していますが、PSにエラーがある場合はVBScriptで例外をスローしたいと思います。これは私がPowerShellを実行するために使用するVBScriptコードです:VBScriptでpowershell例外をキャッチ

Option Explicit 
Dim oShell, appCmd 
Set oShell = CreateObject("WScript.Shell") 

appCmd  = "powershell set-executionpolicy unrestricted -force; c:\3.ps1" 
oShell.Run appCmd, 4, true 

これは私のPSスクリプトです:

throw "I'm exception" 

私は一般的なVBScriptのキャッチしようとしました:

if(Err.number <> 0) then 
Err.raise() 
end if 

をしかし、それはdoesnのうまくいくようです。私はPSだけを使い、VBScriptを取り除きたいですが、VBを動かしているもう一つのアプリケーションで、VBしかサポートしていません。何か案は?

PSでファイルに例外を書き込んだり、VBsでファイルが存在するかどうかをチェックして例外をスローすることができますが、より良い方法があることを願っています。 おかげ$MyErrorLevelあなたはVBSで検出し、独自のコードでPowerShellスクリプトを使用する際に

答えて

3

exit $MyErrorLevel 

VBSでは、WShellオブジェクトRunメソッドは、PowerShellから終了コードを返します。

例VBSスクリプト:

Option Explicit 
Dim oShell, appCmd 
Dim intReturnCode 

Set oShell = CreateObject("WScript.Shell") 

appCmd = "powershell.exe -File c:\Test.ps1" 

intReturnCode = oShell.Run(appCmd, 4, true) 

MsgBox intReturnCode 

例PSスクリプト(C:\ Test.ps1):

try { 
    1/$null 
} catch { 
    exit 1 
} 

exit 0 
+0

ニースは、うまく動作します。例外メッセージを渡す方法はありますか? –

+0

私は良い方法を見つけました:appCmd = "powershell set-executionpolicy unrestricted -force; c:\ 3.ps1; exit $ LASTEXITCODE"この方法で私はPSで終了コードを設定する必要はありません –

+1

私は認識していません、 ごめんなさい。心に浮かんでいるのは、それをテキストファイルで渡してゼロ以外の終了コードイベントを読むことですが、それは回避しようとしているアプローチです。 –