2012-09-06 54 views
0

我在写PS脚本,它将与基于C#的Windows窗体应用程序集成。这就是我试图/已完成:通过C#管道运行PowerShell

  1. 我可以通过运行空间和管道运行PS脚本,但是我遇到当我试图运行使用功能的脚本错误,他说:“由于当前主机没有执行此功能,因此无法调用此功能。”

  2. 我已经研究过这个问题,并且我发现很少有人遇到类似的问题,但是其中一个解决方案强调我需要使用(添加)下面的$ ConfirmPreference =“None”,-Confirm :$假,-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); 
    
+0

什么是scriptText? – MrKWatkins

回答

0

-Confirm:$false -Force意味着是函数的参数,他们没有自己的存在。

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

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

+0

非常感谢您的帮助,您已澄清了很多。 – techspeque

-1

OK,没有使用PowerShell来的对象称为CommonParameters(MSDN: System.Management.Automation.Internal.CommonParameters

参数,是指可以在这里看到:MSDN: Common Parameter Names

而且据我所知,是可变$ConfirmPreference设置为None您无需为您拨打的每个Command设置Confirmfalse。这是含蓄......

而且你还必须在创建Runspace后还是打电话给你的第一Command之前设置此变量一次,而不是每个CommandScript

而且你还可以设置这个变量是这样的:

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