2016-09-28 97 views
0

我有一个使用命令行应用程序生成PDF报告的脚本。Powershell - 如何在参数列表中传递变量

下面是批量形式(日期变量)的脚本:

QsrCrExport.exe -f"C:\SMTP\Reports\Speed of Service Summary" -o"C:\SMTP\Daily_Archive\SpeedofService.pdf" -a"Date:%one%,%one%" -epdf 

我试图实现以上到PowerShell中使用的启动过程与论点,但似乎无法得到的参数正常工作

$crexport = "C:\Program Files (x86)\ReportViewer\Bin\QsrCrExport.exe"; 
$arguments = '-f"C:\ProgramData\ReportViewer\Reports\Speed of Service Summary" -o"C:\SMTP\Generated\SpeedofService.pdf" -a"Date:$reportdate1,$reportdate2" -epdf' 
Start-Process $crexport $arguments -Wait; 

我知道这是行不通的包裹在单引号的变量不会被使用的值替换,但是如果我删除参数中的所有双引号和包装整条生产线在双引号它还是赢了没有工作。

我很新的PowerShell,所以如果这是非常直截了当的道歉。

+0

http://stackoverflow.com/questions/38900961/passing-variable-arguments-using-powershells-start-process-cmdlet。这一个很薄弱,但答案是正确的。你需要将你的参数作为数组___传递。如果您同意,将会被标记为愚蠢。还有关于调用exe的其他答案,但这是我可以罚款的开始进程没有埋没的最好的答案。 – Matt

回答

0

你可以使用一个参数列表数组:

Start-Process -FilePath '"C:\Program Files (x86)\ReportViewer\Bin\QsrCrExport.exe"' -ArgumentList @('-f"C:\ProgramData\ReportViewer\Reports\Speed of Service Summary"', '-o"C:\SMTP\Generated\SpeedofService.pdf"', '-a"Date:$reportdate1,$reportdate2"', '-epdf') -wait 

应该工作。

0

我看到的问题是你有单引号内的变量。我已经切换了引号,以便双引号内的所有内容都以对象而不是专用字符串的形式表示。通过在单引号内的字符串上使用-f运算符,您可以将变量传递到字符串中,即使在单引号内也是如此。

$crexport = "C:\Program Files (x86)\ReportViewer\Bin\QsrCrExport.exe" 
$arguments = ("-f 'C:\ProgramData\ReportViewer\Reports\Speed of Service Summary' -o 'C:\SMTP\Generated\SpeedofService.pdf' -a 'Date:{0},{1} -epdf'" -f $reportdate1, $reportdate2) 
Start-Process $crexport $arguments -Wait 
相关问题