하나의 PowerShell (2.0) 스크립트에서 다른 스크립트를 호출합니다. 주 출력뿐만 아니라 별도로 사용할 수있는 추가 객체 (예 : 메시지에 요약 행을 표시합니다. 를 호출하는 스크립트로매개 변수 ("참조 별"매개 변수)를 사용하여 PowerShell에서 개체를 반환 하시겠습니까?
param([String]$SummaryLine)
$Issues = "Potentially long list of issues"
$SummaryLine = "37 issues found"
$Issues
그리고 Test1.ps1 :
의 스크립트를 호출 할 것으로 Test2.ps1을하자
$MainOutput = & ".\Test2.ps1" -SummaryLine $SummaryOutput
$MainOutput
$SummaryOutput
출력은 단순히 :
Potentially long list of issues
매개 변수 $ SummaryLine은 Test2로 채워지지만 $ SummaryOutput은 Test1에서 정의되지 않은 상태로 유지됩니다.
Test2를 호출하기 전에 $ SummaryOutput을 정의하면 도움이되지 않습니다. 그것은 단지 Test2를 호출하기 전에 할당 된 값을 유지합니다.
$ SummaryOutput 및 $ SummaryLine을 [ref] 변수로 설정하려고했으나 (Test1을 호출 한 것처럼 보이는 것처럼) $ SummaryOutput.Value 속성은 Test2를 호출 한 후 $ null입니다.
PowerShell에서 매개 변수의 값을 반환 할 수 있습니까? 그렇지 않은 경우 해결 방법은 무엇입니까? Test2에서 부모 범위 변수를 직접 할당 하시겠습니까?
거룩한 암소, [ref]가 작동합니다! 이를 시도했을 때 호출 된 스크립트에서 $ OptionalOutput.Value 대신 $ OptionalOutput을 할당했기 때문에 $ x는 호출 스크립트에서 업데이트되지 않았습니다. 두 번째 접근 방식은 어떻게됩니까? $ x가 PSObject이면 자동으로 [ref]로 전달됩니까? –
두 번째 옵션이 아닌 [ref]를 사용하는 것이 좋습니다. PowerShell (.NET)에서는 개체가 참조로 전달되지만 변수의 범위가 지정됩니다. 그것은 처음에는 이해하기 어려울 수 있지만 사실입니다. – JasonMArcher
@ JasonMArcher : 예, 좀 더 명확하게하기 위해 [ref]를 좋아합니다. 레. 모든 객체가 참조에 의해 전달되면 객체를 전달하는 이유는 String (.NET 참조 유형 객체)에서 작동하지 않는 이유는 무엇입니까? –