使用Powershell执行带参数的exe文件

5

我想要执行的命令如下:

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))

参数2是/G:C:\viewpointfile.vpt

参数3是/D:C:(2010-11-23 to 2011-11-23 PM).xls

看起来所有的参数都被正确地传递了。当我在cmd.exe中运行这个命令时,它可以完美地执行。所以PowerShell的某些地方一定出错了。

有没有其他方法可以使用PowerShell来执行此命令?

3个回答

5

如果我无法运行这样的命令,通常我会使用Invoke-Expression。不过我无法测试您提供的命令。

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

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

这个答案对我有用。感谢您分享那篇博客文章。非常感激。 - Chris
1
@Chad Miller 这个链接挂了。 - Novaterata

4
从Powershell社区扩展中获取echoargs.exehttp://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"的原文,这是不可能的,因为它们应该已经被替换为它们的值。

感谢您的回复。$BEGDATE和$TODDATE已经被正确地替换了,我只是在输入时犯了一个错误。C:\问题也是一样。我已经使用echoArgs测试了参数,并更新了我的帖子。 - Chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接