2012-01-19 3 views
2

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

Heres модель, которую я использую, и я должен упомянуть, что я тестирую между как 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") 

Теперь, когда г-н Тим Голден упомянул в документации ... Remoting на другую машину очень просто ... вы просто

c = wmi.WMI("REMOTE_COMPUTER") 

и прочь вы идете ...

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

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

ответ

0

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

Это ограничение Create метод класса Win32_Process WMI

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

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

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

+0

Спасибо за ваш ответ выглядит ответ на этот вопрос заключается в использовании WMI модуль, чтобы запланировать задание на минуту позже ... –

Смежные вопросы