Powershell - 如何在参数列表中传递变量

时间:2016-09-28 11:24:38

标签: powershell

我有一个使用命令行应用程序生成PDF报告的脚本。

这里是批处理表格的脚本(日期是变量):

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

我尝试使用带参数的start-process将上述内容实现到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;

我知道这不会被包含在单引号中的工作因为变量不会被值替换,但是如果我删除了参数中的所有双引号并用双引号将整行包装起来它仍然赢了# 39;工作。

我对powershell很陌生,如果这是非常直接的事情,那么道歉。

2 个答案:

答案 0 :(得分: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

应该工作。

答案 1 :(得分:0)

我看到的问题是你在单引号内有变量。我已切换引号,以便双引号内的所有内容都表示为对象而不是专用字符串。另外,通过在单引号内的字符串上使用-f运算符,您可以将变量传递给字符串,甚至在单引号内。

print(img)