私は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
コンストラクタに値を指定しないと例外がスローされます。不思議なこと