我希望通过自动化运行一些PowerShell脚本。类似的东西:
IList errors;
Collection<PSObject> res = null;
using (RunspaceInvoke rsi = new RunspaceInvoke())
{
try
{
res = rsi.Invoke(commandline, null, out errors);
}
catch (Exception ex)
{
LastErrorMessage = ex.ToString();
Debug.WriteLine(LastErrorMessage);
return 1;
}
}
我面临的问题是,如果我的脚本使用write-host
之类的cmdlet,则上面会抛出System.Management.Automation.CmdletInvocationException
-
无法调用此函数,因为 当前主机没有实现 它
解决此问题的有哪些好方法?
答案 0 :(得分:11)
一种选择是创建一个写主机函数并将其注入您的运行空间。该函数将优先于具有相同名称的cmdlet。在此函数中,如果您的应用程序是控制台应用程序,或者如果您的应用程序是GUI应用程序,则无法执行任何操作或者可能使用[console] :: writeline(),将一些对象注入到PowerShell会话中,该函数可以编写输出to(查看Runspace.SessionStateProxy.SetVariable)。
另一个(有点复杂)选项是实现PowerShell hosting interfaces in your app。