在powershell脚本中强制立即求值(按值复制变量,而不是引用)

在powershell脚本中强制立即求值(按值复制变量,而不是引用),powershell,powershell-2.0,Powershell,Powershell 2.0,我对以下代码有问题 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 -Even

我对以下代码有问题

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的值以使其唯一

尝试使用
[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
}