1

这是我在远程机器上安装 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. 我哪里错了?

4

1 回答 1

0

您正在本地主机上运行远程 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 ...
于 2013-08-19T08:47:59.837 回答