一千萬個為什麽

搜索

如何通過自動化運行PowerShell腳本而不會遇到Host問題

我希望通過自動化運行一些PowerShell腳本。就像是:

IList errors;
Collection 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 -

無法調用此函數,因為   當前主機沒有實現   它

有什麽好方法可以解決這個問題?

最佳答案

一種選擇是創建一個寫主機函數並將其註入您的運行空間。該函數將優先於具有相同名稱的cmdlet。在此函數中,如果您的應用程序是控制臺應用程序,或者如果您的應用程序是GUI應用程序,您可以無所事事或者可能使用[console] :: writeline(),將一些對象註入到PowerShell會話中,該函數可以編寫輸出to(查看Runspace.SessionStateProxy.SetVariable)。

另一個(有點復雜)選項是實現您應用中的PowerShell托管界面

轉載註明原文: 如何通過自動化運行PowerShell腳本而不會遇到Host問題