C#& Powershell:未返回所有Powershell结果

时间:2017-12-10 02:20:07

标签: c# powershell

我一直在制作运行一些Powershell东西的C#应用​​程序,问题是它似乎没有收集Powershell命令的正确/全部结果。

以下代码:

private void Button_Click(object sender, RoutedEventArgs e)
    {
        List<string> results = RunScript("Get-ADUser testuser2 -Properties *");
        this.ShowMessageAsync("OK",results[0]);
    }

    private List<string> RunScript(string comand)
    {
        var powerShell = PowerShell.Create();
        powerShell.Runspace = runspace;
        powerShell.AddScript(comand);

        Collection<PSObject> results = powerShell.Invoke();
        List<string> resultsList = new List<string>();

        if (powerShell.Streams.Error.Count > 0)
        {
            this.ShowMessageAsync("Something went wrong!", "Check error log for details!");
            runspaceBox.AppendText(powerShell.Streams.Error[0] + "\r\n");
        }

        else
        {
            foreach (PSObject obj in results)
            {
                runspaceBox.AppendText(obj.ToString() + "\r\n");
                resultsList.Add(obj.ToString());
            }
        }
        return resultsList;
    }


结果:

  

{CN = testuser2,DC = TESTDOMAIN,DC = COM}


将命令直接放入Powershell会产生以下结果:

  

PS C:\ Users \ Ultimate-V1&gt; Get-ADUser testuser2 -Properties *

     

[上面有一堆额外的东西]

     

描述:

     

DisplayName:Test User2

     

DistinguishedName:CN = Test   之一,CN =用户,DC = TESTDOMAIN,DC = COM

     

分部:

     

DoesNotRequirePreAuth:False

     

[下面有很多额外的东西]


我已经从上面的命令中剪掉了很多结果,因为它很长。

我能解决的问题是为什么它只返回专有名称而不是所有结果,这种情况发生在一些命令而不是其他命令。例如,返回用户上所有AD组的命令正常工作。

如果可能的话,我喜欢它拥有该命令返回的所有内容,我将在代码中稍后格式化resultsList。

非常感谢任何帮助或指示!

1 个答案:

答案 0 :(得分:1)

因为您将结果作为字符串转换,所以您获得了复杂对象的字符串表示(无论对象的.ToString()方法的结果如何)。

在PowerShell本身中,它不会将所有内容都转换为字符串来显示它;它有关于如何一般显示对象的各种规则(通常是表格或列表格式),有些类型有特定的格式化程序。

PetSerAl已在评论中回答,但获取PowerShell在控制台上显示的字符串表示的方法是通过Out-String发送输出:

powerShell.AddScript(comand).AddCommand("Out-String");