首页 > 解决方案 > 从内联 C# 调用 powershell 进程

问题描述

我有一个执行一些内联​​ 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();
  }
}

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

标签: c#powershelltfscontinuous-integrationvnext

解决方案


事实证明,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");
}

推荐阅读