使用WMI在远程计算机上运行命令

时间:2014-07-07 11:30:57

标签: vbscript wmi

我正在尝试运行以下VB脚本以在远程计算机上运行命令。我希望这个脚本等到命令完全执行。

这是我的代码:

Function RemoteExecute(strServer, strUser, strPassword, strCommand,pro)

Dim objLocator , objWMIService

wbemImpersonationLevelImpersonate = 3
wbemAuthenticationLevelPktPrivacy = 6
RemoteExecute = -1

Set objLocator = CreateObject("WbemScripting.SWbemLocator")

On Error Resume Next
Set objWMIService = objLocator.ConnectServer(strServer,"root\cimv2", strUser,strPassword)

objWMIService.Security_.ImpersonationLevel = wbemImpersonationLevelImpersonate
objWMIService.Security_.AuthenticationLevel = wbemAuthenticationLevelPktPrivacy

If Err.Number <> 0 Then
WScript.Echo "Failed to connect to " &strServer, "Error # " & CStr(Err.Number) & " " & Err.Description & vbcrlf & _
"Please check if " & strServer & " is pingable from this client & credentials are correct"
Err.Clear
On Error GoTo 0
RemoteExecute = -1

Set objWMIService = nothing
Set objLocator = nothing
Exit function
end if

      ' Configure the process to show a window
      Set objStartup = objWMIService.Get("Win32_ProcessStartup")
      Set objConfig = objStartup.SpawnInstance_
      objConfig.ShowWindow = SW_NORMAL

        Set Process = objWMIService.Get("Win32_Process")

      'Process.Create Syntax: ' 
      '       uint32 Create(
      '[in]   string CommandLine,
      '[in]   string CurrentDirectory,
      '[in]   Win32_ProcessStartup ProcessStartupInformation,
      '[out]  uint32 ProcessId
      ');

     'Return code Description
      '0     Successful Completion
      '2     Access Denied
      '3     Insufficient Privilege
      '8     Unknown failure
      '9     Path Not Found
      '21    Invalid Parameter

        intReturn = Process.Create(strCommand,NULL, objConfig, intProcessID)

        If intReturn <> 0 Then
          Wscript.Echo "Process could not be created." & _
        vbNewLine & "Command line: " & strCommand & _
        vbNewLine & "Return value: " & intReturn
        Wscript.Quit
        Else
          Wscript.Echo "Process created." & _
        vbNewLine & "Command line: " & strCommand & _
        vbNewLine & "Process ID: " & intProcessID
           RemoteExecute = intProcessID
        End If
        ' Set objWMIService = GetObject("winmgmts:\\" & strServer & "\root\cimv2")
        Set colMonitoredProcesses = objWMIService.ExecNotificationQuery_("SELECT *" +"  FROM __InstanceDeletionEvent " +"WITHIN  5 WHERE TargetInstance ISA 'Win32_Process' " )
      Do
        Set objProcess =  colMonitoredProcesses.NextEvent
        Wscript.Echo objProcess.TargetInstance.Name
        Wscript.Echo objProcess.TargetInstance.ExecutablePath
        Wscript.Echo "1"
        Wscript.Echo "proc:" & objProcess.TargetInstance.ProcessID 
        Wscript.Echo "int:" & intProcessID
        If objProcess.TargetInstance.ProcessID = intProcessID Then
            Wscript.Echo "I will end the monitoring of the process " 
          Wscript.Echo pro & objProcess.TargetInstance.Name
            Exit Do
        end If

      Loop 

Set objWMIService = nothing
Set objLocator = nothing

End Function

strServer = WScript.Arguments.Item(0)
strUser = WScript.Arguments.Item(1)
strPassword = WScript.Arguments.Item(2)
strCommand = WScript.Arguments.Item(3)
pro = WScript.Arguments.Item(4)
Call RemoteExecute(strServer, strUser, strPassword, strCommand,pro)

但我遇到的问题是,脚本在后台运行该进程但不等待它。 我不明白的另一点是,当试图回应以下内容时:

Wscript.Echo objProcess.TargetInstance.Name
Wscript.Echo objProcess.TargetInstance.ExecutablePath
Wscript.Echo "proc:" & objProcess.TargetInstance.ProcessID

它没有回应任何东西,而跟随正确回显了一个漂亮的弹出

Wscript.Echo "1"
Wscript.Echo "int:" & intProcessID

有人可以解决我的问题,可能这个问题对某人来说很天真,对不起我在这里天真。

0 个答案:

没有答案