2

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

截屏

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

这是我正在执行的……</p>

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 的工作方式。这个链接在这里,如何通过自动化运行 PowerShell 脚本而不遇到主机问题,似乎建议创建一个写入主机函数并将其注入运行空间或在应用程序中实现 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。如果有人可以提供有关如何完成此操作的代码示例,那将非常有用。

4

2 回答 2

1

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

    Public Sub WriteVerboseLine(message As String)

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

那有意义吗?

于 2012-07-23T12:03:40.807 回答
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 脚本

于 2013-01-31T08:39:01.233 回答