Поймать исключение PowerShell в VBScript - PullRequest
2 голосов
/ 04 января 2012

Я запускаю сценарии PS из VBScript и хотел бы выдать исключение в VBScript, если были ошибки в PS.Это код 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 

но это не похоже на работу.Я хотел бы использовать только PS и вообще избавиться от VBScript, но это еще одно приложение, которое использует VB и поддерживает только VB.Любые идеи?

Я мог бы написать исключение в файл в PS, а затем из VBs проверить, существует ли файл и выбросить исключение, но я надеюсь, что есть лучший способ.Спасибо

1 Ответ

3 голосов
/ 04 января 2012

В скрипте Powershell используйте

exit $MyErrorLevel

Где $MyErrorLevel - ваш собственный код, который вы обнаружите с помощью VBS.

В 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
...