Powershell并行设置变量

时间:2016-05-20 08:19:40

标签: powershell

我有一个脚本,它以我想要的方式运行,但速度很慢。我尝试在具有foreach parallel的工作流中使用相同的方法,但set-variable命令不是可以在工作流中使用的东西。我想知道我这样做的方式是否不正确,以及是否有更好的方式来做我正在做的事情。我想要进行并行请求的原因是因为在扩展到20多台服务器时脚本可能需要相当长的时间才能完成,因为每台服务器依次可以更快地完成这些操作。

下面是脚本的一个愚蠢版本(没有平行的foreach工作),但它实际上是我需要的工作:

$servers = @("server1", "server2");
foreach ($s in $servers) {
    $counter_value = get-counter "\\$s\counter_name"
    Set-Variable -name "{s}counter" -value $counter_value
    write-host ${server1counter}

1 个答案:

答案 0 :(得分:0)

工作流程中不支持的命令需要在Inlinescript中执行。尝试(未经测试):

workflow t {
    $servers = @("server1", "server2");
    foreach -parallel ($s in $servers) {
        inlinescript {
            $counter_value = get-counter "\\$using:s\counter_name"
            Set-Variable -name "$($using:s)counter" -value $counter_value

            #write-host with a PerformanceCounterSampleSet isn't a good combination. You'll only get the typename since it's a complex type (multiple properties etc.)
            write-host (Get-Variable "$($using:s)counter" -ValueOnly)
        }
    }
}

t