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 に答える