【问题标题】:Running PowerShell through C# pipeline通过 C# 管道运行 PowerShell
【发布时间】:2013-08-01 20:36:47
【问题描述】:

我正在编写将与基于 C# 的 Windows 窗体应用程序集成的 PS 脚本。这是我已经尝试/完成的:

  1. 我能够通过运行空间和管道运行 PS 脚本,但是当我尝试运行使用函数的脚本时遇到错误,说:“无法调用此函数,因为当前主机没有实现它。”

  2. 我已经研究过这个问题,我发现很少有人遇到过类似的问题,但是其中一个解决方案强调我需要使用(添加)以下 $ConfirmPreference = "None", ,-Confirm :$false, -Force

  3. 但是,当我尝试出现以下错误消息时:" Missing expression after unary operator '-'." 您可以看到我试图通过将字符串分配给变量来连接字符串,但这并没有帮助。我不知道如何解决它,有没有人有任何想法?任何帮助将不胜感激。

       // create Powershell runspace
       Runspace runspace = RunspaceFactory.CreateRunspace();
       // open it
       runspace.Open();
    
       // create a pipeline and feed it the script text
       Pipeline pipeline = runspace.CreatePipeline();
    
       //allow the functions to be exec
       string sa = "$ConfirmPreference = \"None\" ";
       string se = " -Confirm:$false -Force";
       string s = sa +scriptText + se;
       pipeline.Commands.AddScript(s);
    

【问题讨论】:

    标签: c# powershell pipeline


    【解决方案1】:

    -Confirm:$false -Force 是函数参数,它们本身并不存在。

    Do-Something -param1 'foo' -Confirm:$false -Force
    

    但是,即使您使用这些参数修改每个函数调用,它也可能无法解决您的所有问题。更多选项请参见here

    【讨论】:

    • 非常感谢您的帮助,您已经澄清了很多。
    【解决方案2】:

    好的,PowerShell 附带了一个名为 CommonParameters (MSDN: System.Management.Automation.Internal.CommonParameters) 的对象

    具体参数可以看这里:MSDN: Common Parameter Names

    据我所知,变量$ConfirmPreference 是否设置为None,您不需要为您正在调用的每个CommandConfirm 设置为false。这是隐含的......

    您还必须在创建Runspace 之后或调用您的第一个Command 之前设置一次此变量,而不是每个CommandScript

    你也可以这样设置这个变量:

    runspace.SessionStateProxy.SetVariable("ConfirmPreference", "none");
    

    【讨论】:

      猜你喜欢
      • 2015-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多