Установка файла MSI на удаленной машине с помощью PowerShell - PullRequest
0 голосов
/ 27 июня 2018

Я работаю над утилитой для автоматизации некоторых процессов, и одной из задач является установка файла .msi на удаленной машине. Файл находится в C:\Users\username на удаленном компьютере, и для простоты имя файла - file.msi. Я использую команду:

Invoke-Command -ComputerName $remoteMachine -ScriptBlock{cmd /c start /wait msiexec /i $installPath /quiet}

Когда я выполняю это на своем локальном компьютере разработчика, он не показывает никаких ошибок, но не устанавливает файл.

Однако, когда я копирую точную команду в скобках и запускаю ее в сценарии PowerShell на удаленной машине, она успешно устанавливается. Я знаю, что мой $remoteMachine правильный, потому что я широко использую его в остальной части сценария.

Я знаю, что переменная $installPath также не является проблемой, потому что для целей тестирования я жестко запрограммировал полный путь, и он все еще не устанавливается.

У меня также есть соответствующие разрешения на удаленном компьютере, потому что ранее в сценарии я без проблем копировал и вставлял .msi с одного компьютера на другой.

Я попробовал комбинацию команд и застрял здесь на некоторое время, поэтому любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 27 июня 2018

В идеале это должно работать.

Invoke-Command -ComputerName $remoteMachine -ScriptBlock{msiexec /i $installPath /quiet}

Причина неудачи в том, что вы не передаете $installPath в качестве списка аргументов. Измените это так.

Invoke-Command -ComputerName $remoteMachine -ScriptBlock{
param(
    [Parameter(Mandatory=$true,
                   Position=0)]
    $installPath
    )
cmd /c start /wait msiexec /i $installPath /quiet
} -ArgumentList $installPath

Но если это не работает, вот обходной путь, который я использовал некоторое время назад. Создайте файл .bat с помощью команды msiexec /i $installPath /quiet и поместите его в то же место, что и файл msi.

Теперь из блока скриптов invoke просто вызовите файл bat.

Invoke-Command -ComputerName $remoteMachine -ScriptBlock{C:\Users\Username\Install.bat}

где Install.bat - имя вашего bat-файла.

Примечание. Возможно, вы также захотите использовать ключ / norestart, если не хотите перезагружаться. Зависит от того, что вы пытаетесь установить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...