【问题标题】:Python 2.7: wmi module: Creating an interactive process on a remote systemPython 2.7:wmi 模块:在远程系统上创建交互式进程
【发布时间】:2012-01-19 19:26:41
【问题描述】:

为可能的远程系统创建安装程序,这样如果他们没有安装任何东西,它将在他们的桌面上启动 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")

现在正如 Tim Golden 先生在文档中提到的那样...远程连接到另一台机器非常简单...您只需

c = wmi.WMI("REMOTE_COMPUTER")

你走了……

从技术上讲,它确实有效,但由于某种原因它不是交互式的......我也修改了 SW_SHOWMINIMIZED 值,但我似乎无法理解我做错了什么。我有域管理员,所以这不应该是一个问题......特别是因为我同时登录到两个系统......很奇怪。

无论如何,非常感谢您的帮助!

【问题讨论】:

    标签: python wmi interactive createprocess


    【解决方案1】:

    这是Win32_Process WMI 类的Create 方法的限制

    出于安全原因,不能使用 Win32_Process.Create 方法 远程启动交互式进程。

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

    Win32_Process.Create 可以创建交互式进程 远程。

    【讨论】:

    • 感谢您的回复看起来这个问题的答案是使用 wmi 模块来安排一分钟后的任务...
    【解决方案2】:

    不幸的是,PSEXEC 似乎是这里唯一可行的解​​决方案......尽管我讨厌调用 3rd 方工具,但它运作良好。

    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 文件夹中,或者……如果你愿意,请指定路径

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-05
      • 1970-01-01
      相关资源
      最近更新 更多