#python #cmd #subprocess #uac #psexec
#python #cmd #подпроцесс #uac #psexec
Вопрос:
Я запускаю psexec в подпроцессе python,
import subprocess
prog = subprocess.Popen([
'C:\Users\user\tools\PSTools\PsExec.exe',
'-u',
'admin',
"-p",
"pass",
"cmd.exe"],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True
)
При этом psexec отлично открывает новое окно терминала с повышенными правами, я спрашиваю, можно ли в любом случае взять на себя управление этим окном с помощью подпроцесса, поскольку это то, что изначально запустило его? Потому что на данный момент stdin и stdout кажутся просто подпроцессом, который запустил psexec, а не терминалом, созданным psexec.
Ответ №1:
PsExec копирует файл, используя общий административный ресурс, на целевой компьютер, затем запускает его как службу, после чего эта служба запускает указанную программу. Итак, ваша программа не имеет подключения.
Используйте COM
Запускает выполнение удаленного объекта script.
объект.Выполнить
Параметры
объект
Объект WshRemote
Примечания
Событие запуска объекта WshRemote запускается, когда скрипт начинает выполняться. Не путайте метод Execute с методом Exec (объекта WScript).
Пример
Следующий пример демонстрирует, как метод Execute используется для создания объекта WshRemote (запуск экземпляра удаленного скрипта).
[VBScript]
Dim Controller, RemoteScript Set Controller = WScript.CreateObject("WSHController") Set RemoteScript = Controller.CreateScript("remote1.js") RemoteScript.Execute Do While RemoteScript.Status <> 2 WScript.Sleep 100 Loop
[JScript]
var Controller = WScript.CreateObject("WSHController"); var RemoteScript = Controller.CreateScript("remote1.js"); RemoteScript.Execute(); while (RemoteScript.Status != 2) { WScript.Sleep(100);
Из справки http://download.microsoft.com/download/winscript56/Install/5.6/W982KMeXP/EN-US/scrdoc56en.exe