【发布时间】:2013-01-31 16:39:01
【问题描述】:
我正在尝试从 c# 程序执行 PowerShell 命令并遇到“无法调用函数,因为当前主机未实现它”异常。
我正在尝试从 c# 程序执行 PowerShell 命令并遇到“无法调用函数,因为当前主机未实现它”异常。
这是我正在执行的……
public string RunScript(string cmd)
{
var initial = InitialSessionState.CreateDefault();
initial.ImportPSModule(new[] { @"C:\Intellitrace\Microsoft.VisualStudio.IntelliTrace.PowerShell.dll" });
var runspace = RunspaceFactory.CreateRunspace(initial);
runspace.Open();
RunspaceInvoke invoker = new RunspaceInvoke(runspace);
// results =
invoker.Invoke(
@"Start-IntelliTraceCollection ""DefaultAppPool"" C:\Intellitrace\collection_plan.ASP.NET.trace.xml C:\IntellitraceLogs");
命令 Start-IntelliTraceCollection 在 IIS 检测期间使用 Cmdlet.Write* 写入详细日志,我猜这是导致异常的 write-host 的工作方式。此链接How to run PowerShell scripts via automation without running into Host issues 似乎建议创建一个写入主机函数并将其注入运行空间或在应用程序中实现 powershell 托管接口。任何关于如何做到这一点的代码示例都会非常有帮助。
我在这里提到了一个类似的问题Running a powershell command in C# errors with, "Cannot invoke this function because the current host does not implement it",它建议使用-Confirm:$false -Force,但我有兴趣了解如何通过实现 PSHost、PSHostUserInterface 和 PSHostRawUserInterface 来解决这个问题。如果有人可以提供有关如何完成此操作的代码示例,那将非常有用。
【问题讨论】:
标签: powershell