我正在编写将与基于C#的Windows窗体应用程序集成的PS脚本。这就是我已经尝试过的事情:
我能够通过运行空间和管道运行PS脚本,但是当我尝试运行使用函数的脚本时遇到错误,说:“无法调用此函数,因为当前主机没有实现它。“
我已经研究过这个问题而且我发现很少有人遇到类似的问题,但其中一个解决方案强调我需要使用(添加)以下$ ConfirmPreference =“None”, - 确认:$ false,-Force
然而,当我尝试时出现以下错误消息:“一元运算符后缺少表达式' - '。”您可以看到我尝试通过将字符串分配给它来连接字符串变量,但这没有帮助。我不知道如何解决它,有没有人有任何想法?任何帮助将不胜感激。
// 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 :(得分: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
之前设置此变量,而不是每个Command
或Script
。
你也可以像这样设置这个变量:
runspace.SessionStateProxy.SetVariable("ConfirmPreference", "none");