我希望通过自动化运行一些Power Shell脚本.就像是: IList errors;CollectionPSObject res = null;using (RunspaceInvoke rsi = new RunspaceInvoke()){ try { res = rsi.Invoke(commandline, null, out errors); } catch (Exception ex) {
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; } }
我面临的问题是,如果我的脚本使用cmdlet,如write-host,则会抛出System.Management.Automation.CmdletInvocationException –
Cannot invoke this function because
the current host does not implement
it.
有什么好方法可以解决这个问题?
一种选择是创建一个写主机函数并将其注入您的运行空间.该函数将优先于具有相同名称的cmdlet.在此函数中,如果您的应用程序是控制台应用程序,或者如果您的应用程序是GUI应用程序,您可以无所事事或者可能使用[console] :: writeline(),将一些对象注入到PowerShell会话中,该函数可以编写输出to(查看Runspace.SessionStateProxy.SetVariable).另一个(有点复杂)选项是实现PowerShell hosting interfaces in your app.