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

내가 인수-프로세스를 시작하여 위의 파워 쉘에 구현하기 위해 노력하고있어하지만 인수가 제대로

을 작동시킬 수없는 것 : 여기

배치 형태로 스크립트 (날짜 변수)입니다
$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__로 __ 통과해야합니다. 동의하면 속임수로 표시됩니다. 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 
관련 문제