2016-09-12 2 views
0

통해 exe 인 응용 프로그램으로 전달하는 인수의 순서로 배열을 변환 : 스크린 샷에파워 쉘 : 나는 Octopush 대시 보드와 함께 작동 문어 대시 보드

enter image description here

코드 나에게 TFS의 변경 세트의 목록을 제공합니다. 그래서 이미 내 ID 목록이 있습니다. 좀 exe 파일을 실행하고 C#을 통해 다음과 같은 방법이 EXE 에 매개 변수를 전달해야합니다

start "" "\\ptnas1\home_dirs\michaelb\Documents\Visual Studio 2015\Projects\Changesetes\Changesetes\bin\Debug\Changesetes.exe" "Test proj name" 3.22.652.965863 QA false 463841 464268 463450 463841 463167 458908 462917 
pause 

내 하드 betwwen 결합해야합니다 : 그것은이 방식으로 작동

string cParams = "\"Test proj name\" " + "3.22.652.965863 " + "QA " + "false " + "463841" + " 464268" + " 463450" + " 463841" + " 463167" + " 458908" + " 462917" + " 462780" + " 462429" + " 461225" + " 460414"; 
     var proc = System.Diagnostics.Process.Start(@"\\ptnas1\home_dirs\michaelb\Documents\Visual Studio 2015\Projects\Changesetes\Changesetes\bin\Debug\Changesetes.exe", cParams); 

또는 PowerShell의

"proj name", "version num", "string1", "false"및 내가받은 ID 목록이 포함되어 있습니다. Powershell에서 어떻게 작동합니까?

[System.Diagnostics.Process]::Start($Exe,$Params) 
:
+0

무엇이 문제입니까? Powershell 실행 정책은 무엇입니까? .exe 전화는? 매개 변수를 전달 하시겠습니까? 아니면 특정 응용 프로그램? 당신은 '이 방법으로 작동합니다'라고 말한 다음 어떻게 작동시키는 지 묻습니다. 그래서 질문이 무엇인지 혼란 스럽습니다. –

+0

PowerShell의 [Invoke-Expression] (https://technet.microsoft.com/de-de/library/hh849893.aspx)을 살펴보면 코드를 작성한 다음 invoke-expression 명령을 사용하여 실행할 수 있습니다. –

+0

미안하지만, 나는 크라이 아니 었어. 내 질문을 편집했습니다. 동적 배열과 소수의 상수를 결합하여 arge로서 내 exe에 전달해야합니다. ID 목록은 항상 인수 목록의 끝에 있어야합니다. –

답변

1
$Exe = '\\ptnas1\home_dirs\michaelb\Documents\Visual Studio 2015\Projects\Changesetes\Changesetes\bin\Debug\Changesetes.exe' 
$Params = "Test proj name " + "3.22.652.965863 " + "QA " + "false " + "463841" + " 464268" + " 463450" + " 463841" + " 463167" + " 458908" + " 462917" + " 462780" + " 462429" + " 461225" + " 460414" 
&$Exe $Params 

이 기본 명령에 따라, 당신은 당신은 여전히 ​​System.Diagnostics.Process가를 계속 사용할 수 있습니다, 귀하의 예를 사용

$Params = "Test proj name","3.22.652.965863","QA ","false" [etc.] 
&$Exe $Params 

첫 번째 배열로 PARAMS에 가입해야합니다

다른 옵션은 WMI를 사용합니다.

([WMICLASS]"ROOT\CIMV2:Win32_Process").Create("$Exe $Params") 

그리고 -ArgumentList 매개 변수와 과정 PowerShell을 Start-Process

편집

분리하여 상수 및 동적 변수,

$Exe = `\\ptnas1\home_dirs\michaelb\Documents\Visual Studio 2015\Projects\Changesetes\Changesetes\bin\Debug\Changesetes.exe` 
$Constants = "Test proj name","3.22.652.965863","QA" etc. 
$Dynamic = "462917","462780","462429","461225","460414" 

&$Exe $Constants $Dynamic 

또는 다른 실행 옵션 중 하나를 사용

+0

마지막 답변이 제대로 작동하는 것처럼 보입니다. 감사합니다. 나는 그것을 시험해 볼 것이다. –

+0

작동하지 않습니다. $ Exe, $ Constants 및 $ Dynamic에 대해 동일한 예외가 있습니다. 은 내부 또는 외부 명령으로 인식되지 않습니다. –

+0

예외는 무엇입니까? – Avshalom

0
$argumentList = "`"Test proj name`" 3.22.652.965863 QA false 463841 464268 463450 463841 463167 458908 462917" 
    start-process -FilePath "\\ptnas1\home_dirs\michaelb\Documents\Visual Studio 2015\Projects\Changesetes\Changesetes\bin\Debug\Changesetes.exe" -ArgumentList $argumentList 
+0

변수 $ projName, $ version, $ envName 및 $ resolve를 사용하여 다이나믹 배열 ids $ changesets를 연결할 수 있습니까? 다음과 같음 : $ params = $ projName + $ version + $ envName + $ resolve + $ changesets? –

0

01에서 제안한 코드를 기반으로 한 내 대답수정 된 것을 :

$Exe = `\\ptnas1\home_dirs\michaelb\Documents\Visual Studio 

2015\Projects\Changesetes\Changesetes\bin\Debug\Changesetes.exe` 
$Constants = "Test proj name","3.22.652.965863","Dev","false" 
$Dynamic = "462917","462780","462429","461225","460414" 

$all = $Constants + $Dynamic | select -uniq 

&$Exe $all 

문제는 이런 식으로 concole 응용 프로그램을 .NET으로 두 개의 매개 변수를 전달하는 것은 불가능하다는 것이다 :

$Exe = `\\ptnas1\home_dirs\michaelb\Documents\Visual Studio 2015\Projects\Changesetes\Changesetes\bin\Debug\Changesetes.exe` 
$Constants = "Test proj name","3.22.652.965863","QA" etc. 
$Dynamic = "462917","462780","462429","461225","460414" 

&$Exe $Constants $Dynamic 

응용 프로그램이 결코 마지막 인수를 수신하지 않기 때문에. 나는 파워 쉘이 단지 두 번째 것을 무시한다고 생각한다.