Выполнение exe с аргументами с использованием Powershell

Это то, что я хочу выполнить:

c:\Program Files (x86)\SEQUEL ViewPoint\viewpoint.exe/Setvar ((POSTSTR $POSTSTR) (POSTEND $POSTEND))/G:C:\viewpointfile.vpt/D: C: ($ BEGDATE to $TODDATE).xls

Вот что я пробовал:

$a = "/Setvar ((POSTSTR $POSTSTR) (POSTEND $POSTEND))"

$b = "/G:C:\viewpointfile.vpt"

$c = "/D: C: ($ BEGDATE до $TODDATE).xls"

$Viewpoint = "c:\Program Files (x86)\SEQUEL ViewPoint\viewpoint.exe"

& $Точка зрения $a $b $c

При выполнении этого я получаю сообщение об ошибке:

Файл C:\viewpointfile.vpt "/D: C: ($ BEGDATE до $TODDATE).xls" не найден!

Я не уверен, откуда он получает дополнительные кавычки. Если я запустил команду только с $a и $b, она работает нормально.

Любая помощь будет принята с благодарностью. Благодарю!:)

Обновление

manojlds предложил echoargs, поэтому здесь он выводит из него:

&./echoargs.exe $viewpoint $a $b $c

Arg 0 - C:\Program Files (x86)\SEQUEL ViewPoint\viewpoint.exe

Arg 1 is/Setvar ((POSTSTR 20101123) (POSTEND 20111123))

Arg 2 является /G: C:\viewpointfile.vpt

Arg 3 is/D: C: (2010-11-23 - 2011-11-23).xls

Кажется, что все аргументы передаются должным образом. Когда я запускаю его как команду в cmd.exe, он выполняется отлично. Итак, что-то на конце Powershells должно испортить выход.

Есть ли другой способ выполнить эту команду с помощью Powershell?

Ответ 1

Я обнаружил, что метод blogged by Joel Bennett является самым надежным при вызове устаревших команд

http://huddledmasses.org/the-problem-with-calling-legacy-or-native-apps-from-powershell/

Мне пришлось использовать это при вызове LogParser из Powershell:

set-alias logparser "C:\Program Files (x86)\Log Parser 2.2\LogParser.exe"
start-process -NoNewWindow -FilePath logparser -ArgumentList @"
"SELECT * INTO diskspaceLP FROM C:\Users\Public\diskspace.csv" -i:CSV -o:SQL -server:"Win7boot\sql1" -database:hsg -driver:"SQL Server" -createTable:ON
"@

Ответ 2

Получите echoargs.exe из расширения сообщества Powershell (http://pscx.codeplex.com/), чтобы выяснить аргументы, которые Powershell отправляет на ваш exe.

$a = "/Setvar((POSTSTR $POSTSTR)(POSTEND $POSTEND))"
$b = "/G:C:\viewpointfile.vpt"
$c = "/D:C:($BEGDATE to $TODDATE).xls"
$echoArgs = ".\echoargs.exe"
&$echoArgs $a $b $c

Похоже, вы передаете аргументы, но viewpoint.exe, похоже, действует. Я не вижу, что вы здесь делаете:

$c = "/D:C:($BEGDATE to $TODDATE).xls"

После C: нет \, а также ваше сообщение об ошибке, которое вы вставили, показывает $BEGDATE и $TODDATE verbatim, что невозможно, поскольку они были бы заменены их значениями.

Ответ 3

Если я не могу запустить такую ​​команду, она обычно работает для меня с Invoke-Expression. Не могу проверить ваш, хотя.

Invoke-Expression "$viewpoint $a $b $c"