这就是我想要执行的内容:
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执行此命令吗?
答案 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"