Dotnet核心:调用Powershell模块不提供输出

时间:2018-04-20 16:02:39

标签: c# powershell module .net-core

我正在编写一个DOTNET核心2.0控制台应用程序,它将接收一个powershell命令并在该系统上执行它并返回结果(现在到控制台)。

下面的代码示例是我想要完成的内容的精简版本。使用此代码,如果我执行命令 dotnet run" get-childitem "我收到以下回复:

 [x] Received get-childitem
    Directory: C:\git\campus-database-services
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----         4/3/2018   3:18 PM                .vscode
d-----        4/17/2018   8:58 PM                bin
d-----        4/17/2018   8:58 PM                obj
-a----         4/3/2018   3:18 PM              9 .gitignore
-a----         4/3/2018   3:18 PM            211 AppSettings.json
-a----        4/20/2018  10:29 AM            763 campus-database-services.cs
-a----        4/17/2018   8:55 PM           1091 campus-database-services.csproj
-a----         4/8/2018   8:17 AM            392 nuget.config
 [x] Done get-childitem

但是,当我执行命令 dotnet run" Get-DbaSqlService" 时,我得到以下输出:

 [x] Received Get-DbaSqlService
 [x] Done Get-DbaSqlService

这是在http://dbatools.io找到的PowerShell模块 - 一个非常标准的SQL Server社区驱动的PowerShell模块。该模块在我的系统上运行良好。在我的机器上调用时,它将返回所有已安装的SQL Server服务的列表。这是调用系统上安装的Powershell模块的一个非常简单的示例。在我调用Powershell模块的情况下,我没有得到如上所示的结果 - 根本没有输出命令。我也可以调用任何Powershell模块中的任何函数。 但是,如果我调用任何本机命令,例如 get-childitem get-process get-service ,则返回结果可以正常工作。每当我从已安装的模块调用函数时,我都不会收到错误,只是没有结果。

此应用程序的目的是传入命令,它将执行它们并返回结果。在这种情况下,似乎powershell命令从未执行或返回结果。

非常感谢任何帮助。我是新手,看起来非常微不足道。但是,我很困难,已经有一段时间了。

using System;
using System.Text;
using System.Threading;
using System.Management.Automation;
using System.Net;
class MyApp
{
    public static void Main(string[] message)
    {    
        Console.WriteLine(" [x] Received {0}", message[0]);
        var shell = PowerShell.Create();
        shell.Commands.AddScript(message[0] + " | out-string");
        var results = shell.Invoke();
        if (results.Count > 0)
        {
            var builder = new StringBuilder();
            foreach (var psObject in results)
            {
                builder.Append(psObject.BaseObject.ToString() + "\r\n");
            }
            Console.WriteLine(builder.ToString());
        }
        Console.WriteLine(" [x] Done {0}", message[0]);
    }
}

0 个答案:

没有答案