0

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

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

  2. 我研究了这个问题,发现遇到类似问题的人很少,但是其中一个解决方案强调我需要使用(添加)以下 $ConfirmPreference = "None", ,-Confirm:$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);
    
4

2 回答 2

0

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

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

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

于 2012-09-06T15:19:06.427 回答
-1

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

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

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

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

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

runspace.SessionStateProxy.SetVariable("ConfirmPreference", "none");
于 2013-08-01T12:31:41.887 回答