2

次のコードに問題があります

foreach ($ex in ("foo", "bar", "baz")) {
$timer = New-Object Timers.timer
$taction =  {
    Write-Host "Timer fired for: $ex"
}
$timer.Interval = 1000 
$timer.AutoReset = $false
$timer.Start()

Register-ObjectEvent -InputObject $timer -EventName elapsed -SourceIdentifier "$ex" -Action $taction

}

このコードは、次の出力を提供します

Timer fired for: baz
Timer fired for: baz
Timer fired for: baz

しかし、私はそれをfoo、bar、bazにしたいと思います。問題は、 $ex 変数が最後にすべてのタイマーによって読み取られるため、その値が何であれ、すべてのタイマーがそれを取得することです。$taction の $ex の値を一意になるようにコピーするにはどうすればよいですか?

4

1 に答える 1

2

を使用してみてください[scriptblock]::Create()。これは、作成時に引数を評価します。

foreach ($ex in ("foo", "bar", "baz"))
{

$timer = New-Object Timers.timer
$taction =  [scriptblock]::create("Write-Host Timer fired for: $ex")

$timer.Interval = 1000 
$timer.AutoReset = $false
$timer.Start()

Register-ObjectEvent -InputObject $timer -EventName elapsed -SourceIdentifier $ex  -Action $taction
}
于 2012-06-20T05:30:48.263 に答える