Выполнение exe с аргументами с использованием Powershell - PullRequest
4 голосов
/ 24 ноября 2011

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

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

Аргумент 1 равен / Setvar ((POSTSTR 20101123) (POSTEND 20111123))

Arg 2 - это /G:C:\viewpointfile.vpt

Arg 3 - это / D: C: (с 2010-11-23 по 2011-11-23PM) .xls

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

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

Ответы [ 3 ]

4 голосов
/ 24 ноября 2011

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

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
"@
4 голосов
/ 24 ноября 2011

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

Invoke-Expression "$viewpoint $a $b $c"
4 голосов
/ 24 ноября 2011

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

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