通过C#管道运行PowerShell

时间:2012-09-06 14:27:22

标签: c# powershell pipeline

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

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

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

  3. 然而,当我尝试时出现以下错误消息:“一元运算符后缺少表达式' - '。”您可以看到我尝试通过将字符串分配给它来连接字符串变量,但这没有帮助。我不知道如何解决它,有没有人有任何想法?任何帮助将不胜感激。

       // 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);
    

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:-1)

好的,PowerShell中有一个名为CommonParameters(MSDN: System.Management.Automation.Internal.CommonParameters

的对象

这里的参数可以在这里看到:MSDN: Common Parameter Names

据我所知,变量$ConfirmPreference设置为None,您不需要为每Confirm false设置Command你在打电话。那隐含着......

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

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

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