【问题标题】:Parallel workflow only runs one item并行工作流只运行一项
【发布时间】:2018-03-16 13:38:37
【问题描述】:

我在我的脚本中创建了一个工作流,它在网络上“跟踪”应用程序的日志。我正在寻找错误标志以采取纠正措施并提醒帮助台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}} 

    }

}

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

【问题讨论】:

  • powershell 不接受 foreach 或 ForEach-Object 的 -parallel 参数。
  • 我认为只有在工作流程中才能使用 -parallel。顺便说一句,我没有收到错误。
  • 是的,我对工作流程一无所知。

标签: powershell parallel.foreach


【解决方案1】:

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

我已经修改了你的代码。
第 1 步:执行以下 powershell 代码以创建工作流

工作流 Get-Tails {
参数 ($POS)#带有终端名称的数组
ForEach -parallel($POS 中的$item)
{
内联脚本{
write-host ("正在扫描"+$Using:item) -ForegroundColor red -BackgroundColor white
Get-Content -Path "\$Using:item\c$\path\to\logs\Agent.log" -Tail 1 -Wait | % {if ($_ -match '') {Send-Spark $Using:item}}
}
}
}


第 2 步:在 powershell 中调用工作流

Get-Tails


带输出的示例执行:

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

PS C:\windows\system32> 工作流测试
{
$a=@(1,2,3,4,5,6,7,8,9,10)
Foreach -Parallel($i in $a)
{
InlineScript {"内联 A1 = $Using:i"}
}
}

PS C:\windows\system32> 测试
内联 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

【讨论】:

  • 谢谢,我已经实现了你的例子,现在我可以看到我正在扫描的终端,就像你的输出一样,我只是看不到日志“拖尾”。我怎么知道是真的在拉信息?
猜你喜欢
  • 2016-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
相关资源
最近更新 更多