2014-04-04 3 views
0

단순히 (사용자 CB에 대한 모든 감사)를 다음과 같이하고, 다른 하나의 PS 스크립트에서 현재 내 스크립트 (script1이)를 하나 개의 매개 변수를 전달 할 수 있도록하려면 다른 powershell 인스턴스를 통해 다른 스크립트를 성공적으로 엽니 다. 이제 나는 'script2.ps1'스크립트에 매개 변수를 전달할 수 있기를 원합니다. 나는 시도 다음 그러나이 나던 작동하지 :합격 매개 변수는

script1.ps1

$name = read-host "The name" 

$filepath = Resolve-Path "script2.ps1" 
start-process -FilePath powershell.exe -ArgumentList "-file `"$($filepath.path)`"-name $name" 

script2.ps1

Param(

    [string]$name 

) 

write-host $name 

이 단순히 $로 script1이에서 $ 이상 통과 이름한다 script2의 이름. 나는 메신저 가깝지만 충분히 가깝지 않다고 생각합니다!

도움 주셔서 감사합니다.

답변

0

내가 볼 수있는 유일한 문제는 당신이 마지막 "을 탈출 한 후 공간을 누락 것입니다,이 시도 : 당신은 별도의 인스턴스에서 두 번째 스크립트를 실행하려는 이유는 특별한 이유가

start-process -FilePath powershell.exe -ArgumentList "-file `"$($filepath.path)`" -name $name" 
+0

다시 공격합니다! 덕분에 많은 도움을 주셔서 대단히 감사합니다 – user3402227

+0

@ user3402227 도와 드리겠습니다. Duncan의 asnwer 당 as ... 나는 왜이 경우 start-process를 사용하는지 알기에 너무 궁금합니다.) –

0

있는가 Powershell? 그렇지 않다면, 당신은 직접 스크립트를 실행하는 데 훨씬 더 할 것입니다 : 당신이없는

$name = read-host "The name" 
.\script2.ps1 -name $name 

이 방법은 매개 변수를 탈출 걱정.

당신이하고있는 방식은 모든 매개 변수를 문자열로 변환하고 Windows 명령 행 처리로 처리합니다. 가치가 사용 가능한 형태로 전달되도록하는 것은 악몽 일 수 있습니다. 대신 스크립트를 직접 호출하면 객체 인을 매개 변수로 전달할 수 있으며 Powershell은 문자열 대신 객체를 사용합니다.