gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:24:06 30 4
gpt4 key购买 nike

我有这个名为 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 似乎总是将开关参数解释为 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] 参数一样对待!

关于c# - 如何从 C# 将 [switch] 参数传递给 PowerShell 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10304020/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com