Выполнение 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 to $ TODDATE).xls"

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

& $ Viewpoint $ a $b $ c

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

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

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

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

Обновить

manojlds предложил echoargs, так что вот выход из него:

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

Аргумент 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 PM).xls

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

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

3 ответа

Решение

Я считаю, что метод, опубликованный в блоге Джоэла Беннетта, является наиболее надежным при вызове устаревших команд

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
"@

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

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

Получить 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 дословно, что невозможно, так как они были бы заменены их значениями.

Другие вопросы по тегам