无法调用此函数,因为当前主机未实现它

时间:2012-07-23 08:24:16

标签: powershell

我正在尝试从c#程序执行PowerShell命令并运行到“无法调用该函数,因为当前主机未实现它”异常。

Screenshot

我正在尝试从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 *编写详细日志,我想这是写主机工作的方式导致异常。这里的链接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来解决这个问题。如果任何人可以提供关于如何完成此操作的代码示例,那将非常有用。

2 个答案:

答案 0 :(得分:1)

在创建自定义主机时(在PSHostUserInterface界面中)提供实现的方法之一是

    Public Sub WriteVerboseLine(message As String)

由于您没有提供主机(反过来可以提供PSHostUserInterface),您还没有告诉它如何处理write-verbose电话。

这有意义吗?

答案 1 :(得分:0)

使用“write-host”会导致我出现此错误。只需直接输入你想要的qoutes而不是“write-host”就可以为我修复它。

例如:而不是

write-host 'ERROR! There is no free space for the selected category.'

我用

"ERROR! There is no free space for the selected category."

注意:我的senario在c#

的文本文件中调用powershell脚本