运行 远程服务器上使用 VBScript 的 BAT 文件。没有 psexec,并且作为不同的用户

Run BAT file on remote server using VBScript. No psexec, and as a different user

我正在尝试使用 VBScript 在远程服务器上执行 BAT 文件。进一步要求:

我查阅了这篇文章:https://docs.microsoft.com/en-us/windows/desktop/WmiSdk/connecting-to-wmi-remotely-with-vbscript

我知道如何创建连接,但我不知道如何使用相同的连接创建进程。

我相信这个解决方案非常接近,唯一的问题是我认为它冒充了当前 运行 计算机的用户:

strCommand = "C:\temp\copyall.bat"
strPath = "C:\temp"
strcomputer="."

process = "winmgmts:" & "{impersonationLevel=impersonate}!\" & strComputer & "\root\cimv2"
msgbox process

Set objWMIService = GetObject(process)
Set objProcess = objWMIService.Get("Win32_Process")

errReturn = objProcess.Create(strCommand, strPath, Null, intProcessID)

If errReturn = 0 Then
      WScript.Echo "scan success: " & intProcessID
Else
      WScript.Echo "scan fail: " & errReturn
End If

Microsoft 网站上的这个示例展示了如何正确创建连接,但我不知道如何使用该连接。

' Full Computer Name
' can be found by right-clicking My Computer,
' then click Properties, then click the Computer Name tab)
' or use the computer's IP address
strComputer = "FullComputerName" 
strDomain = "DOMAIN" 
Wscript.StdOut.Write "Please enter your user name:"
strUser = Wscript.StdIn.ReadLine 
Set objPassword = CreateObject("ScriptPW.Password")
Wscript.StdOut.Write "Please enter your password:"
strPassword = objPassword.GetPassword()

Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServices = objSWbemLocator.ConnectServer(strComputer, _
                                                     "Root\CIMv2", _
                                                     strUser, _
                                                     strPassword, _
                                                     "MS_409", _
                                                     "ntlmdomain:" + strDomain)
Set colSwbemObjectSet = objSWbemServices.ExecQuery("Select * From Win32_Process")
For Each objProcess in colSWbemObjectSet
    Wscript.Echo "Process Name: " & objProcess.Name 
Next

答案可能就在眼前,但我现在看不到。想法?

连接到远程服务器后,只需获取 Win32_Process 对象并像在本地一样调用 Create() 方法。

Set objSWbemServices = objSWbemLocator.ConnectServer(...)
Set objProcess = objSWbemServices.Get("Win32_Process")
errReturn = objProcess.Create(strCommand, strPath, Null, intProcessID)

您想要 运行 的文件必须存在于本地远程服务器上才能工作。

另请注意,这通常需要远程系统的管理员权限。