【问题标题】:Installation of MSI File on remote machine from local machine从本地机器在远程机器上安装 MSI 文件
【发布时间】:2013-08-19 16:47:59
【问题描述】:

这是我在远程机器上安装 msi 文件的脚本:

Const MSIFileName = "\\<IP ADDR>\c$\MySetup\<FILENAME>"

Set WshShell = WScript.CreateObject( "WScript.Shell" )
WshShell.Run "msiexec /a " & MSIFileName & " /quiet /log c:\install.log", 1, True

当我从本地计算机运行此脚本时,该文件会安装在我正在运行的计算机上。相反,我希望它安装在MSIFileName 中指定的机器上。我哪里错了?

【问题讨论】:

    标签: vbscript windows-installer


    【解决方案1】:

    您正在本地主机上运行远程 MSI。要在远程主机上安装远程可执行文件,您可以使用 WMI:

    host  = "<IP ADDR>"
    setup = "msiexec /a ""C:\MySetup\<FILENAME>"" /quiet ..."
    
    Set wmi = GetObject("winmgmts://" & host & "/root/cimv2")
    
    rc = wmi.Get("Win32_Process").Create(setup, , , pid)
    
    If rc = 0 Then
      WScript.Echo "Setup started with PID " & pid & "."
    Else
      WScript.Echo "Starting setup failed. (" & rc & ")"
    End If
    

    上面将异步启动进程(即Create 立即返回)。如果你需要等待远程进程完成,你必须像这样监控它:

    Do
      WScript.Sleep 100
      Set p = wmi.ExecQuery("SELECT * FROM Win32_Process WHERE ProcessID=" & pid)
    Loop Until p.Count = 0
    

    不过,可能有更简单的方法来做你想做的事,例如PsExec:

    psexec \\<IP ADDR> msiexec /a "C:\MySetup\<FILENAME>" /quiet ...
    

    【讨论】:

    • 不客气。但是,请避免发布“谢谢”cmets。对 SO 表示感谢的正确方法是投票和/或 accept 回答。
    • 我有另一个关于同一主题的查询。如果以防万一,我需要以其他用户的身份运行,这可能吗? (即)在脚本中指定用户名和密码?
    • 它需要更多的代码,但这是可能的。见here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    • 2015-01-26
    • 2011-12-05
    • 2016-04-02
    相关资源
    最近更新 更多