gpt4 book ai didi

powershell - 如何在VBScript中从PowerShell取回错误消息

转载 作者:行者123 更新时间:2023-12-03 08:26:47 25 4
gpt4 key购买 nike

我在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命令失败时,它不会返回错误消息。我应该如何捕获该消息并将其发送回用户?

最佳答案

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

您可以将该变量的 bool(boolean) 值转换为整数,然后将其作为退出代码返回:

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

PowerShell命令字符串( ...; "exit 0")中当前拥有的内容不会做任何事情,因为它仅回显字符串 "exit 0"而不实际设置退出代码(因此返回默认值0)。但是,即使您删除了该语句周围的双引号,它仍将始终返回0。

通过设置适当的退出代码,您可以获取数值并将其转换回 bool(boolean) 值( 0False1True):
enabled = CBool(shell.Run("...", 0, True))

或只取数字值:
exitcode = shell.Run("...", 0, True)

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

关于powershell - 如何在VBScript中从PowerShell取回错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39040044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com