如何在VBScript中从PowerShell返回错误消息

时间:2016-08-19 13:15:39

标签: powershell debugging vbscript error-handling exchange-server

我在VBScript中运行这样的PowerShell命令。

以下是我正在运行的VBScript

'This Script is used for creating Mailboxes for Active Directory Users.
'This script triggers a Power Shell Script which creates the mailbox for the
'ActiveDirectory User.
'
Set args = WScript.Arguments
'Argument 0 contains the identity User Name
WScript.Echo args.Item(0)
'Argument 1 contains the Mail Store Alias Name
WScript.Echo args.Item(1)
'Argument 2 contains the Mail Database
WScript.Echo args.Item(2)
'Argument 3 contains the Report Log Path
WScript.Echo args.Item(3)

On Error Resume Next

Dim shell
Set shell = CreateObject("WScript.Shell")

'Firing the PowerShell command from VBScript
shell.Run "PowerShell.exe -PSConsoleFile ""E:\Program Files\Microsoft\Exchange Server\Bin\exshell.psc1"" -NoExit ""&{""Enable-Mailbox -Identity '"&Replace(args.Item(0),"'", "''")&"' -Alias '"&args.Item(1)&"' -Database '"&args.Item(2)&"';""exit 0""} ",,20

If Err.Number <> 0 Then 
    WScript.Echo("Error Occurred in CreateMailBoxExchange script" & Err.Description)
    WScript.Quit(2)
End If 
WScript.Quit(3)

因此,当Enable-Mailbox命令失败时,它不会返回错误消息。我该如何捕获该消息并将其发送回用户?

1 个答案:

答案 0 :(得分:1)

Enable-Mailbox似乎没有返回任何内容,但它至少应设置automatic variable $?,这表示最后一个cmdlet是否成功运行。

您可以将该变量的布尔值转换为整数,并将其作为退出代码返回:

Enable-Mailbox ...; exit [int]$?

您目前在PowerShell命令字符串(...; "exit 0")中所拥有的内容无论如何都不会做任何事情,因为它只是回显字符串"exit 0"而没有实际设置退出代码(所以默认值为0)退回)。但即使你删除了该语句的双引号,它仍然会返回0。

通过设置正确的退出代码,您可以获取数值并将其转换回布尔值(0False1True):

enabled = CBool(shell.Run("...", 0, True))

或只取数值:

exitcode = shell.Run("...", 0, True)

但是,对于后者,您应该反转返回值(exit [int](!$?)),因为按照惯例,数字退出状态0表示成功,而数字非零退出代码用于表示错误状态。