Listing 1: RunProgram.vbs's Main Subroutine
Sub Main()
Dim Args
Dim Command, StartIn, Computer, UserName, Password
Dim Wait, Elapsed
Dim ShowWindow, Result
Dim StartTime, EndTime
Dim Output, TimeInfo
Dim WMIRun
Set Args = WScript.Arguments
' If there are no unnamed arguments, or if the /? argument
' is present, show the usage message
If (Args.Unnamed.Count = 0) Or Args.Named.Exists("?") Then _
ShowUsage
' BEGIN CALLOUT A
Command = Unescape(Args.Unnamed(0))
' END CALLOUT A
StartIn = Args.Named("startin")
ShowWindow = Args.Named("window")
If Not IsNumeric(ShowWindow) Then ShowUsage
If (ShowWindow < 0) Or (ShowWindow > 65535) Then ShowUsage
Computer = Args.Named("computer")
UserName = Args.Named("username")
Password = Args.Named("password")
Wait = Args.Named.Exists("wait")
Elapsed = Args.Named.Exists("elapsed")
' Create instance of class
' BEGIN CALLOUT B
Set WMIRun = New WMIExec
' END CALLOUT B
Result = WMIRun.ConnectServer(Computer, UserName, Password)
If Result <> 0 Then
WScript.Echo "Error 0x" & Hex(Result) & " connecting to '" _
& Computer & "'"
WScript.Quit Result
End If
If Elapsed Then StartTime = Now()
Result = WMIRun.RunProgram(Command, StartIn, ShowWindow)
If Result <> 0 Then
WScript.Echo "Error 0x" & Hex(Result) & " starting '" _
& Command & "'"
WScript.Quit Result
End If
' Output initial status message
WScript.Echo WMIRun.Status
If Wait Then
' Suspend script while process is running
Do While WMIRun.ProcessExists()
WScript.Sleep PROCESS_CHECK_INTERVAL
Loop
If Elapsed Then
EndTime = Now()
TimeInfo = "Started: " & CStr(StartTime) & vbNewLine _
& "Ended: " & CStr(EndTime) & vbNewLine _
& "Elapsed: " & GetElapsed(DateDiff("s", StartTime, EndTime))
' Output full status if running from wscript.exe
If ScriptHost() = "wscript.exe" Then
Output = WMIRun.Status & vbNewLine & TimeInfo
Else
Output = TimeInfo
End If
WScript.Echo Output
End If
End If
End Sub