2012-04-24 18 views
2

私はtestSwitch.ps1という名前のこのPowerShellスクリプトを持っている:私はこのようなPowerShellで直接このスクリプトを呼び出すとC#からPowerShellスクリプトに[switch]パラメータを渡すには?

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は常にスイッチパラメータがfalseとして解釈しているようです通訳。残念なことは、これにより、値を指定しないことに関する例外をスローせずに、[switch]パラメータに対してスクリプトがfalseの値を参照することになります。 [bool]パラメータとは対照的に、CommandParameterコンストラクタに値を指定しないと例外がスローされます。不思議なこと

答えて

2

、あなたはそうのように、パラメータ値としてtrueを指定する必要があります。

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

戻り

s= False 

を:期待どおりに動作も虚偽の指定、

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

だから、私は[スイッチ]パラメータは[bool]パラメータとまったく同じように扱われるべきだと思いますC#から!

関連する問題