繁体   English   中英

如何将[switch]参数从C#传递给PowerShell脚本?

[英]How to pass a [switch] parameter to a PowerShell script from C#?

我有这个名为testSwitch.ps1的powershell脚本:

param(
    [switch] $s
)

Return 's= ' + $s 

当我直接在PowerShell中调用此脚本时,如下所示:

.\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。 令人沮丧的是,这会导致脚本在[switch]参数中看到false值,而不会抛出任何有关未指定值的异常。 [bool]参数相反,如果未在CommandParameter构造函数中提供值,则会引发异常。

奇怪的是,您必须将true指定为参数值,如下所示:

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

此外,指定false也可以按预期工作:

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

返回

s= False

所以,我猜[switch]参数在从C#调用时应该像[bool]参数一样对待!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM