Ответ 1
Мне удалось заставить это работать с помощью командлета Invoke-Expression
.
Invoke-Expression "& `"$scriptPath`" test -r $number -b $testNumber -f $FileVersion -a $ApplicationID"
Итак, у меня есть powershell script, который должен запускать исполняемый файл с аргументом для передачи, чтобы установить, какой метод я хочу запустить, и мне нужно передать параметр, который является каталогом в файл конфигурации. Так вот что я
Start-Process -FilePath "C:\Program Files\MSBuild\test.exe" -ArgumentList /genmsi/f $MySourceDirectory\src\Deployment\Installations.xml
/f - это короткое имя, а файл - длинное имя для моего атрибута... Я получаю сообщение об ошибке в powershell, указывающее, что для /f или/файла не может быть найден позиционный параметр.
Любые мысли?
Мне удалось заставить это работать с помощью командлета Invoke-Expression
.
Invoke-Expression "& `"$scriptPath`" test -r $number -b $testNumber -f $FileVersion -a $ApplicationID"
Попробуйте указать список аргументов:
Start-Process -FilePath "C:\Program Files\MSBuild\test.exe" -ArgumentList "/genmsi/f $MySourceDirectory\src\Deployment\Installations.xml"
Вы также можете предоставить список аргументов в виде массива (аргументы, разделенные запятыми), но использование строки обычно проще.
Вот альтернативный метод для выполнения нескольких аргументов. Я использую его, когда аргументы слишком длинны для одного лайнера.
$app = 'C:\Program Files\MSBuild\test.exe'
$arg1 = '/genmsi'
$arg2 = '/f'
$arg3 = '$MySourceDirectory\src\Deployment\Installations.xml'
& $app $arg1 $arg2 $arg3
Просто добавив пример, который отлично работал у меня:
$sqldb = [string]($sqldir) + '\bin\MySQLInstanceConfig.exe'
$myarg = '-i ConnectionUsage=DSS Port=3311 ServiceName=MySQL RootPassword= ' + $rootpw
Start-Process $sqldb -ArgumentList $myarg