Python 2.7: модуль wmi: создание интерактивного процесса в удаленной системе - PullRequest
2 голосов
/ 19 января 2012

Создание установщика для возможных удаленных систем, чтобы, если у них не было чего-то установлено, он запустил autorun.exe на их рабочем столе (конечно, было бы легко дать им ссылку, и они могли бы нажать «Пуск и запуск»). ... но это было бы на 100% лучше, если бы это было сделано для них!)

Вот модель, которую я использовал, и я должен упомянуть, что я тестирую между Windows 7 и XP, хотя я не думаю, что это слишком большая сделка.

import wmi
import win32com.client

def Copy_Program(computer=None, environment="Production"):
    Oracle_install = r'\\server1\Install\Oracle\Oracle9i_Disk1\autorun\autorun.exe'


    """  BELOW PROCESS SHOWS UP IN TASKMANAGER, but I NEED IT TO BE INTERACTIVE.
    wmi = win32com.client.GetObject ("winmgmts:\\\\"+computer+"\\root\\cimv2")
    win32_process = wmi.Get ("Win32_Process")
    in_parameters = win32_process.Methods_ ("Create").InParameters
    in_parameters.Properties_ ('CommandLine').Value = "notepad.exe"
    result = win32_process.ExecMethod_ ("Create", in_parameters)
    """  
    SW_SHOWMINIMIZED = 1

    c = wmi.WMI (computer)
    startup = c.Win32_ProcessStartup.new (ShowWindow=SW_SHOWMINIMIZED)
    pid, result = c.Win32_Process.Create (
    CommandLine=Oracle_install,
    ProcessStartupInformation=startup
    )
if __name__ == '__main__':
    Copy_Program(computer = "D02659")

Теперь, как мистер Тим Голден упоминал в документах ... удаленное взаимодействие с другой машиной довольно просто ... вы просто

c = wmi.WMI("REMOTE_COMPUTER")

и ты уходишь ...

и технически это работает, но почему-то не интерактивно ... Я также возился со значениями SW_SHOWMINIMIZED, но я не могу понять, что я делаю неправильно. У меня есть администратор домена, поэтому это не должно быть проблемой ... тем более, что я вошел в обе системы одновременно ... странно.

Во всяком случае, помощь очень ценится!

Ответы [ 2 ]

0 голосов
/ 24 января 2012

PSEXEC, к сожалению, выглядит здесь как единственное жизнеспособное решение ... как бы мне не хотелось использовать сторонний инструмент, это работает хорошо.

import subprocess
import getpass

Oracle = r'\\server\z$\deploy\Install\Oracle\Oracle9i_Disk1\Oracle9i_Disk1\autorun\autorun.exe'

def Craft_Startup(COMPUTER, COMMAND):
    UNAME="DOMAIN\\"+getpass.getuser()
    PASSWD = getpass.getpass()
    subprocess.Popen("psexec -u "+ UNAME +" -p " + PASSWD + " \\\\"+COMPUTER+" -i " + COMMAND)


if __name__ == '__main__':
    COMPUTER = 'P04213'
    COMMAND = Oracle
    Craft_Startup(COMPUTER, 'cmd.exe /c start ' + COMMAND)

Таким образом, здесь необходимо поместить psexec в папку system32 или ... указать путь, если хотите

0 голосов
/ 20 января 2012

Это ограничение Create метода Win32_Process WMI class

Из соображений безопасности метод Win32_Process.Create не может использоватьсячтобы запустить интерактивный процесс удаленно.

Windows 2000 Professional with SP2 and earlier, Windows NT, and Windows 98/95

Win32_Process.Create может создать интерактивный процесс удаленно.

...