我不确定为什么会出现这种情况,但如果我使用 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
。