无法使用 msiexec 安装 MSI 的本地副本,但可以通过网络使用 psexec 安装

无法使用 msiexec 安装 MSI 的本地副本,但可以通过网络使用 psexec 安装

我不确定为什么会出现这种情况,但如果我使用 msiexec 在 PowerShell 中远程访问计算机,则无法安装 MSI 的本地副本。我收到此错误:

[computername]: PS C:\temp> msiexec -q -i installer.msi
T h i s   i n s t a l l a t i o n   p a c k a g e   c o u l d   n o t   b e   o p e n e d .     V e r i f y   t h a t   t h e   p a c k a g e   e x i s t s   a n d   t h a t   y o u   c a n  
 a c c e s s   i t ,   o r   c o n t a c t   t h e   a p p l i c a t i o n   v e n d o r   t o   v e r i f y   t h a t   t h i s   i s   a   v a l i d   W i n d o w s   I n s t a l l e r   p 
a c k a g e .

(我也不确定为什么那里会有额外的间距。)

但是,我使用 psexec 从网络安装它没有任何问题,如下所示:

psexec -s \\computername msiexec -i -q \\networkpath\to\installer.msi

我已确保本地副本没有被阻止,所以我不确定是什么原因造成的。

如何将 MSI 复制到计算机并从远程会话中安装它?或者 psexec 是执行此操作的最佳方法吗?

答案1

以下是为我解决问题的答案:

如果您尝试在包含 msi 文件的文件夹中运行以下命令:

msiexec /i .\要安装的程序包.msi /qn

如果您使用了制表符补全,(向我的 Linux 兄弟姐妹们挥手致意!)Power-shell 包含文件名,其中看起来无害.\,这会导致出现奇怪间距的错误消息。

删除 .msi 文件名前面的 .\

那么命令将是:

msiexec /i 要安装的包.msi /qn

作为参考,找到了以下信息这里

答案2

您是否正在运行 64 位机器?我之前在本地 32 位桌面上运行 powershell 并通过网络执行 64 位 MSI 安装程序时遇到过此问题。

尝试将其放在脚本的顶部并观察会发生什么:

    if ($pshome -like "*syswow64*") {
    & (join-path ($pshome -replace "syswow64", "sysnative") powershell.exe) -file (join-path $psscriptroot $myinvocation.mycommand) @args
    exit
}

答案3

我应该早点发布这个,但我发现在 PowerShell 中,最好传递包的完整路径(当然,如果有空格,则用引号引起来):

[computername]: PS C:\cwd doesn't matter> msiexec -q -i "c:\path to\the package\Software Name.msi"

我猜测msiexec无法从 PS 读取当前目录。

答案4

修正版本:

psexec -s \\computername msiexec /i /q \\networkpath\to\installer.msi

注意/i/q代替-i-q

相关内容