0

Ich führe einen PowerShell-Befehl wie folgt in einem VBScript.So erhalten Sie eine Fehlermeldung von PowerShell in VBScript

unten ist das VBScript bei mir läuft

'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) 

Also, wenn Enable-Mailbox misslingt es nicht wieder mit der Fehlermeldung kommt. Wie sollte ich diese Nachricht erfassen und an den Benutzer zurücksenden?

+0

versuchen/fangen Enable-Mailbox. Geben Sie einen Nicht-Null-Beendigungscode zurück, wenn es nicht funktioniert. Dokumentieren Sie die Bedeutung der Fehlercodes oder protokollieren Sie sie einfach. Untersuchen Sie% LASTEXITCODE%. Oder einfach alles in PowerShell verschieben und den Wrapper loswerden :) –

Antwort

1

Enable-Mailbox scheint nichts zurückzugeben, aber es sollte mindestens die automatic variable$? setzen, die angibt, ob das letzte Cmdlet erfolgreich ausgeführt wurde oder nicht.

Sie können den Booleschen Wert dieser Variablen auf eine ganze Zahl gegossen und zurück, dass als Exit-Code:

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

Was Sie in Ihrer Powershell-Befehlszeichenfolge haben (...; "exit 0") nicht alles tun, wie auch immer, da es nur die Zeichenfolge "exit 0" zurückgibt, ohne tatsächlich einen Beendigungscode zu setzen (so wird der Standardwert 0 zurückgegeben). Aber selbst wenn man die doppelten Anführungszeichen um diese Aussage entfernt wäre es immer noch zurückkehrt immer 0.

Durch einen geeigneten Exit-Code Einstellung, die Sie den numerischen Wert nehmen und wandeln es wieder in einen boolean (0False, 1True) invertieren

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

für letztere jedoch sollten Sie th:

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

oder einfach nur den numerischen Wert übernehmen Der Rückgabewert (exit [int](!$?)), da per Konvention ein numerischer Beendigungsstatus 0 Erfolg anzeigt, während numerische Nicht-Null-Beendigungscodes zum Signalisieren von Fehlerzuständen verwendet werden.

Verwandte Themen