2016-09-28 60 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