How to run PowerShell scripts via automation without running into Host issues

纵饮孤独 提交于 2019-12-01 15:54:35

问题


I'm looking to run some powershell scripts via automation. Something like:

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;
    }
}

the problem I'm facing is that if my script uses cmdlets such as write-host the above throws an System.Management.Automation.CmdletInvocationException -

Cannot invoke this function because the current host does not implement it.

What are some good options for getting around this problem?


回答1:


One option is to create a write-host function and inject that into your runspace. The function will take precedence over a cmdlet with the same name. In this function, you could do nothing or perhaps use [console]::writeline() if your app is a console app, or if your app is a GUI app, inject some object into the PowerShell session that the function can write the output to (look at Runspace.SessionStateProxy.SetVariable).

Another (bit more complicated) option is to implement the PowerShell hosting interfaces in your app.



来源:https://stackoverflow.com/questions/2656610/how-to-run-powershell-scripts-via-automation-without-running-into-host-issues

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!