Выполнение 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"