0

我有一个执行一些内联​​ C# 代码的 PowerShell 脚本,如下所示:

Add-Type -ReferencedAssemblies $Assem -TypeDefinition $Source -Language CSharp
[AnalyzeHelper.AnalyzeDirectories]::CheckPath("XXX")

在那个 C# 代码中,我想输出到我的 PowerShell 输出。所以在我的 C# 中,我实现了:

public static void CheckPath(string path)
{
    WriteOutput("Begin CheckPath");
}

private static void WriteOutput(string text)
{
  using (PowerShell powerShellInstance = PowerShell.Create())
  {
    powerShellInstance.AddCommand("Write-Host").AddParameter("string", text).Invoke();
  }
}

但不幸的是,它不起作用。它实际上只是挂在调用调用中。

4

1 回答 1

2

事实证明,PowerShell 支持委托,因此解决方案非常简单。我是这样打电话的:

[Action[string]]$action = {param($message) Write-Host "$message"}
Add-Type -ReferencedAssemblies $Assem -TypeDefinition $Source -Language CSharp
[AnalyzeStringLibraries.AnalyzeStrings]::CheckPath("XXX", $action)

然后在 C# 中我可以这样做:

public static void CheckPath(string path, Action<string> writeToHost)
{
    writeToHost("Begin CheckPath");
}
于 2018-12-12T11:32:47.840 回答