Запустите BAT-файл на удаленном сервере, используя VBScript.Нет psexec, а как другой пользователь - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь выполнить BAT-файл на удаленном сервере, используя VBScript.Дополнительные требования:

  • psexec не разрешен

  • Мне нужен скрипт для работы с разрешениями другого пользователя, а не с моей собственной рабочей станции

Я ознакомился с этой статьей: 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

Ответ, вероятно, смотрит мне в лицо, но я просто не вижу его прямо сейчас.Идеи?

1 Ответ

0 голосов
/ 16 октября 2018

После подключения к удаленному серверу просто получите объект Win32_Process и вызовите метод Create(), как если бы вы работали локально.

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

Файл, который вы хотите запустить, должен существовать локально наудаленный сервер, чтобы это работало.

Также обратите внимание, что для этого обычно требуются права администратора в удаленной системе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...