2016-09-28 16 views
0

コマンドラインアプリケーションを使用してPDFレポートを生成するスクリプトがあります。Powershell - 引数リスト内で変数を渡す方法

ここでスクリプトがバッチ形式(日付は変数です)にあります:私は、引数を指定して起動プロセスを使用してPowerShellのに上記の実装しようとしていますが、引数が正しく

を動作させるように見えることはできません

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

私は、これは変数が文句を言わない値に置き換えられて、単一引用符で包まれたしかし、私は、引数内のすべての二重引用符を削除し、二重引用符で行全体をラップする場合、それはまだ勝った動作しません知っている

$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にとても慣れています。

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

http://stackoverflow.com/questions/38900961/passing-variable-arguments-using-powershells-start-process-cmdlet。これは弱いですが、答えは正しいです。あなたは引数をarray__として__passする必要があります。あなたが同意するならば、欺瞞としてフラグを立てるでしょう。 exeを呼び出すことについての他の答えがありますが、それは埋葬されていないスタートプロセスのためにうまくいくものです。 – Matt

答えて

0

あなたはArgumentListは、配列を使用することができます。

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 
関連する問題