2012-10-23 3 views
4

이 PowerShell 스크립트는 자체적으로 호출합니다 (스크립트의 1 단계는 GAC에서 어셈블리를로드하므로 AppDomain이 새로 고쳐 져야 함). 스위치 매개 변수를 self에 어떻게 전달합니까? 현재이 작업을 수행 중입니다.Powershell이 ​​스위치 매개 변수를 자체에 전달합니다.

if ($provisionsites -eq $true) 
{ 
    powershell $currentDirectory/Deploy.ps1 -reload:$true -env:$env -provisionsites 
} 
else 
{ 
    powershell $currentDirectory/Deploy.ps1 -reload:$true -env:$env 
} 

너무 길어 보입니다. 내가 이것을 시도하는 경우 :

값 "선택 System.String" 를 입력 할 수 변환 할 수 없습니다 "System.Management.Automat ion.SwitchParameter

답변

3

을 아마도 전화 :

powershell $currentDirectory/Deploy.ps1 -reload:$true -env:$env -provisionsites:$provisionsites 

그것은 실패 powershell.exe은 전혀 필요하지 않습니다. & 연산자로 바꿉니다. 즉, 동일한 세션에서 스크립트를 호출하고 매개 변수 변환 및 관련 문제를 피하십시오. 문제는 해결할 수 있지만 더 좋음 b 처음에는 피했다. 즉, 문제에 관해서는

& $currentDirectory/Deploy.ps1 -reload:$true -env:$env -provisionsites:$provisionsites 

을 할 수있다. $provisionsites은 외부 응용 프로그램에서 전달하기 전에 또는 False이 아닌 $true 또는 $false이 아닌 문자열로 변환됩니다. 결과 실제 인수는 -provisionsites:True입니다. 그런 다음 새로운 powershell 세션에서이 인수를 스크립트 Deploy.ps1으로 전달합니다. 문자열 True 또는 False이 필요하지 않으므로 부울 값이 예상됩니다.

가능한 해결 방법

powershell $currentDirectory/Deploy.ps1 ... -provisionsites:`$$provisionsites 

$을 탈출하지만 powershell과 그 문제의 호출을 제거하기 위해 고려를 부가 될 것이다.

+0

그래서 & 연산자를 사용하면 앱 도메인도 새로 고칩니다. 티는 바로 가기입니까, 아니면 차이가 있습니까? – Luis

+0

'&'는'powershell'의 지름길이 아닙니다. 그것은 스크립트 나 함수 인 경우 새로운 범위에서 연산자를 "호출합니다"(동일한 범위에서'.' 연산자 == 호출과는 대조적으로)입니다. 명령 자체가 평가 된 표현식의 결과이기 때문에 어떤 경우에는 생략 할 수 있지만 사용자의 경우에는 사용할 수 없습니다. "응용 프로그램 도메인도 새로 고칩니다."에 대한 귀하의 Deploy.ps1이 무엇인지 모르겠습니다. 사실, 아마 ** 당신은 ** powershell을 통해 별도의 powershell 프로세스를 시작하는 것을 의미합니다. 그래서 "확실하게"라는 단어로 대답을 시작한 것입니다. 확실하지 않았습니다. –

+0

GAC에 어셈블리를 배포하고 있는데, 스크립트의 2 단계에서 잠재적으로 참조하는 어셈블리이므로 응용 프로그램 도메인을 새로 고치는 데 새로운 powershell 프로세스가 필요한 이유는 무엇입니까? 귀하의 답변을 주셔서 감사합니다. – Luis

관련 문제