2

使用 Powershell 对象并运行 foreach 循环来获得结果,

我得到了 2 个正确的 IP 地址结果 144.68.205.19 和 144.68.205.22 但它打印在 1 行中,

144.68.205.19144.68.205.22

应该像这样拆分新行,

144.68.205.19
144.68.205.22

请告知,这里有一个 C# 代码,

// Powershell
            Runspace runSpace = RunspaceFactory.CreateRunspace();
            runSpace.Open();
            Pipeline pipeline = runSpace.CreatePipeline();

            Command invokeScript = new Command("Invoke-Command");
            RunspaceInvoke invoke = new RunspaceInvoke();

            // invoke-command -computername compName -scriptblock { get-process }

            ScriptBlock sb = invoke.Invoke("{"+ PowerShellCodeBox.Text +"}")[0].BaseObject as ScriptBlock;
            invokeScript.Parameters.Add("scriptBlock", sb);
            invokeScript.Parameters.Add("computername", TextBoxServer.Text);

    string str = "";

    pipeline.Commands.Add(invokeScript);
    Collection<PSObject> output = pipeline.Invoke();
    foreach (PSObject psObject in output)
    {

        str = str + psObject;
    }

    if (str == ""){
        str = "Error";

        ResultBox.ForeColor = System.Drawing.ColorTranslator.FromHtml("#FF0000");
    }

    ResultBox.Text = str;
4

2 回答 2

2

您可以在构建时插入一个新行str

foreach (PSObject psObject in output)
{
    str += "\n" + psObject;
}

或使用string.Join

string str = String.Join("\n", output);
于 2013-11-12T21:27:28.743 回答
1

对于初学者,如果您打算在循环中构建字符串,请查看 using StringBuilder. 其次,您永远不会在其中添加新行,但这很容易解决(也可以使用 stringbuilder 的本机方法!)

pipeline.Commands.Add(invokeScript);
Collection<PSObject> output = pipeline.Invoke();

StringBuilder sb = new StringBuilder();
foreach (PSObject psObject in output)
{
    sb.AppendLine(psObject.ToString());
}
于 2013-11-12T21:33:08.907 回答