使用Powershell执行带参数的exe

时间:2011-11-23 20:42:41

标签: 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到$ TODDATE).xls”找不到!

我不确定从哪里得到额外的报价。如果我只用$ a和$ b运行命令它运行正常。

非常感谢任何帮助。谢谢! :)

更新

manojlds建议 echoargs 所以这里是它的输出:

  

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

     

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

     

Arg 1是/ Setvar((POSTSTR 20101123)(发布时间20111123))

     

Arg 2是/G:C:\viewpointfile.vpt

     

Arg 3是/ D:C:(2010-11-23至2011-11-23 PM).xls

似乎所有参数都正确传递。当我在cmd.exe中将其作为命令运行时,它会完美执行。因此,Powershells的某些内容必须弄乱输出。

还有其他方法可以使用Powershell执行此命令吗?

3 个答案:

答案 0 :(得分:4)

从Powershell社区扩展(http://pscx.codeplex.com/)获取echoargs.exe以找出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

然而,你似乎正在传递参数,但是可能是在执行了。我不明白你在这做什么:

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

C:之后没有\,而且您粘贴的错误消息也会显示$BEGDATE$TODDATE,这是不可能的,因为它们会被替换他们的价值观。

答案 1 :(得分:4)

我发现Joel Bennett博客的方法在调用遗留命令时最可靠

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

从Powershell调用LogParser时我必须使用它:

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 :(得分:4)

如果我不能运行这样的命令,它通常适用于Invoke-Expression。但不能测试你的。

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