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