1

Я не уверен, почему это так, но я не могу установить локальную копию MSI, если я удаленно на машине в PowerShell с msiexec. Я получаю эту ошибку:

[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 - лучший способ сделать это?

4 ответа4

1

Вот ответ, который решил проблему для меня:

Если вы попытались запустить следующую команду из папки, содержащей файл MSI:

msiexec /i.\package-to-install.msi /qn

Если вы использовали завершение табуляции, (машет мне на моих Linux братьях и системах!) Power-shell включает имя файла с безобидным видом .\, Что приводит к появлению странно разнесенного сообщения об ошибке.

Удалите.\ Перед именем файла .msi

Команда будет тогда:

msiexec /i package-to-install.msi /qn

В качестве ссылки эта информация была найдена здесь.

0

Вы случайно не используете 64-битную машину? Я уже сталкивался с этой проблемой раньше, когда я запускал powershell на локальном 32-разрядном рабочем столе и выполнял 64-разрядный установщик MSI по сети.

Попробуйте вставить это в начало вашего скрипта и посмотрите, что произойдет:

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

Я должен был опубликовать это намного раньше, но я обнаружил, что в PowerShell лучше всего передавать полный путь к пакету (в кавычках, конечно, если есть пробелы):

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

Я предполагаю, что msiexec не может прочитать текущий каталог из PS.

-1

Исправленная версия:

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

Заметьте /i и /q вместо -i и -q .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .