2012-04-24 2 views
2

나는 testSwitch.ps1라는 이름이 PowerShell 스크립트를 가지고 :이 같은 PowerShell에서 직접 스크립트를 호출 할 때[스위치] 매개 변수를 C#에서 PowerShell 스크립트로 전달하는 방법은 무엇입니까?

param(
    [switch] $s 
) 

Return 's= ' + $s 

:

.\testSwitch.ps1 -s 

출력은

s= True 

이며 출력 스위치가없는 경우 False입니다. 그러나 나는이 C# 코드와 같은 스크립트를 호출 할 때 :

Command command = new Command(@"testSwitch.ps1"); 

command.Parameters.Add(new CommandParameter("s")); 

RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create(); 
using (Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration)) 
{ 
    runspace.Open(); 
    Pipeline pipeline = runspace.CreatePipeline(); 
    pipeline.Commands.Add(command); 

    IEnumerable<PSObject> psresults = new List<PSObject>(); 
    psresults = pipeline.Invoke(); 
    Console.WriteLine(psresults.ToArray()[0].ToString()); 
} 

출력은 다음과 같습니다

s= False 

PowerShell 명령 라인과는 달리 CommandParameter 항상 스위치 매개 변수가 거짓으로 해석하는 것 통역사. 실망스러운 점은 값을 지정하지 않은 것에 대한 예외를 던지지 않고 스크립트가 [switch] 매개 변수에 대해 false 값을 보게되는 것입니다. [bool] 매개 변수와 반대로 CommandParameter 생성자에 값을 제공하지 않으면 예외가 발생합니다.

답변

2

이상하게도, 당신과 같이 매개 변수 값으로 true를 지정해야합니다

command.Parameters.Add(new CommandParameter("s", true)); 

을 또한, 허위로도 기대 작품 지정 :

command.Parameters.Add(new CommandParameter("s", false)); 

반환

s= False 

을 그래서, [switch] 매개 변수는 [bool] 매개 변수와 똑같이 다루어 져야합니다. C#에서!

관련 문제