并行工作流只运行一个项目

时间:2018-03-16 13:38:38

标签: powershell parallel.foreach

我已经在我的脚本中创建了一个工作流程,该工作流程在网络上发布了" tails"应用程序的日志。我正在寻找错误标记以采取纠正措施并提醒帮助台Send-Spark功能

由于某种原因,foreach只是"拖尾"一个数组项而不是并行的所有数组项。

workflow Get-Tails {

  param ($POS)#Array with terminal names


  ForEach -parallel ($item in $POS)
  { 
    write-host "Scanning "$item -ForegroundColor red -BackgroundColor white   
    Get-Content -Path "\\$item\c$\path\to\logs\Agent.log" -Tail 1 -Wait | % {if ($_ -match '<Status Code="NotReady">') {Send-Spark $item}} 

    }

}

我不知道自己做错了什么。有一个更好的方法吗?

1 个答案:

答案 0 :(得分:0)

`我希望你必须使用inlinescript命令来执行你在foreach-parallel循环中保存的命令。

我修改了你的代码。
步骤1:执行以下powershell代码以创建工作流程
工作流程Get-Tails {
param($ POS)#Array,终端名称为   ForEach -parallel($ POS中的$ item)
  {
    将InlineScript {
    写主机(&#34;扫描&#34; + $使用:项目)-ForegroundColor red -BackgroundColor white
    Get-Content -Path&#34; \ $使用:item \ c $ \ path \ to \ logs \ Agent.log&#34; -Tail 1 -Wait | %{if($ _ -match&#39;&#39;){Send-Spark $ Using:item}}
    }
    }
}


第2步:在powershell中调用工作流程
获取尾巴


带输出的示例执行:

#######################

PS C:\ windows \ system32&gt;工作流程测试 {
$ a = @(1,2,3,4,5,6,7,8,9,10)
Foreach -Parallel($ i in $ a)
{
InlineScript {&#34;内联A1 = $使用:i&#34;}
}
}

PS C:\ windows \ system32&gt;测试
内联A1 = 7
内联A1 = 8
内联A1 = 6
内联A1 = 10
内联A1 = 9
内联A1 = 3
内联A1 = 5
内联A1 = 2
内联A1 = 4
内联A1 = 1
`
如果您需要任何帮助,请告诉我
请访问以获取更多信息:
https://docs.microsoft.com/en-us/powershell/module/psworkflow/about/about_foreach-parallel?view=powershell-5.1