使用parallel.foreach调用powershell脚本文件

时间:2016-08-30 09:04:15

标签: c# powershell parallel.foreach

我正在寻找几乎类似的解决方案。情景是一样的。我对c#.net中的每个循环都有并行。它在实际命中powershell代码之前调用了2个函数。代码片段如下。

我的问题是,使用c#代码中的运行空间并行调用powershell脚本文件的正确方法是什么。目前问题是PowerShell无限期地处于等待状态。

请让我知道改进或正确的方式。我不清楚上面给出的代码,特别是创建了运行空间池并分配给PS对象。如何或何时调用RemoteCommandInvoker()。我理解它的构造函数,就够了。 ?

我的代码段。该代码从Prallel.ForEach调用。这里我们传递IPdress和机器名称。脚本文件是相同的。

public string ExecuteCommandDirect(string IpAddress, string machineName, string logFilePath, string powerShellPath, string PSLogFilePath) { String FullPsFilePath = powerShellPath; // path of powershell script file; String PsParameters = FullPsFilePath + " " + IpAddress + " " + machineName + " " + PSLogFilePath;
    Runspace runspace = RunspaceFactory.CreateRunspace();

    runspace.Open();

    //Console.WriteLine("Create pipeline & add commands....");
    // Create pipeline and add commands
    Pipeline pipeline = runspace.CreatePipeline();
    pipeline.Commands.AddScript(PsParameters);

    // Execute Script
    Collection<PSObject> results = new Collection<PSObject>();
    AWSlogging.WriteLog("Invoking Script....", logFilePath);

    try
    {
        results = pipeline.Invoke();
    }
    catch (Exception ex)
    {
        results.Add(new PSObject((object)ex.Message));
    }

    // Close runspace
    runspace.Close();
    runspace.Dispose();

    //Console.WriteLine("Completed.Run Space closed...");
    AWSlogging.WriteLog("Completed.Run Space closed...", logFilePath);

    //Script results to string
    StringBuilder stringBuilder = new StringBuilder();

    //Console.WriteLine("Output....Start");
    AWSlogging.WriteLog("Output....Start", logFilePath);

0 个答案:

没有答案