Преобразование команды msiexec из cmd в powershell - PullRequest
0 голосов
/ 05 июня 2018

В моем скрипте powershell мне нужно спокойно запустить пару команд msiexec.Проблема в том, что когда я пытаюсь запустить команду, всплывающее окно справки установщика Windows показывает, а не выполняет команду.(Изображение ниже)

enter image description here

Эта же команда хорошо работает в cmd.Ниже моя команда.Я сохранил & в команде в двойных кавычках, чтобы считать ее строкой, как это было предложено.

& msiexec /log c:\msxml.log /quiet /I "&" D:\LoadGeneratorsetup\prerequisites\msxml6\msxml6_x64.msi

Я попытался использовать Start-Process -FilePath, чтобы выполнить это, но в итоге обнаружил следующую ошибку.

Start-Process : A positional parameter cannot be found that accepts argument 'c:\msxml.log'.
At line:1 char:1
+ Start-Process -FilePath msiexec /log c:\msxml.log /quiet /I "&" D:\Lo ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Start-Process], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.StartProcessCommand

Может кто-нибудь сообщить подробности о том, как выполнить команду тихо, используя powershell.

Ответы [ 2 ]

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

Я хочу предупредить вас о модуле PowerShell установщика Windows на github.com.Прокрутите вниз по этой полосе для описания и некоторых примеров, см. Вкладку релизов для загрузки .Я не особо тестировал его, но он из Хит Стюарт - старший инженер-программист Microsoft ( github ).

Бриф,встроенный образец :

install-msiproduct .\example.msi -destination (join-path $env:ProgramFiles Example)

Некоторые дополнительные ссылки :

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

Для вашей второй команды:

& msiexec /i "& D:\LoadGeneratorsetup\HP_LoadGenerator.msi" /qb /l*vx "& D:\LoadGeneratorsetup\Logs\InstallationLogs"+"_"+(Get-Date -Format "yyyy-MM-dd-hh-mm-s")+".txt"

У вас есть два варианта: либо задать путь к журналу для переменной, либо просто заключить в скобки путь:

1 - установить для переменной

$logfile = "D:\LoadGeneratorsetup\Logs\InstallationLogs" + "_" + (Get-Date -Format "yyyy-MM-dd-hh-mm-s") + ".txt"
msiexec /i "D:\LoadGeneratorsetup\HP_LoadGenerator.msi" /qb /l*vx $logfile

2 - заключить в скобки путь

msiexec /i "D:\LoadGeneratorsetup\HP_LoadGenerator.msi" /qb /l*vx ("D:\LoadGeneratorsetup\Logs\InstallationLogs" + "_" + (Get-Date -Format "yyyy-MM-dd-hh-mm-s") + ".txt")

Я предполагаю, что команда просто не оценивает путь журнала перед выполнением команды.

...