PowerShell脚本块中更改变量

3

我正在尝试在ScriptBlock中更改一个变量。 我做错了什么吗?

$reader=(New-Object System.Xml.XmlNodeReader $xaml)
$Window=[Windows.Markup.XamlReader]::Load($reader)
$Window.Add_SourceInitialized( {
    $timer = new-object System.Windows.Threading.DispatcherTimer
    $timer.Interval = [TimeSpan]"0:0:0.25"
    $timer.Add_Tick( $updateBlock )
    $timer.Start()
 } )
 $count = 0
 $updateBlock = { Write-Host $count; $count++; Write-Host $count}

输出是由0和1的重复序列组成的。那么我如何访问变量而不仅仅是它的副本?

$count++ -> ([ref]$count).Value++ - user4003407
谢谢,那个有效。 - yogurtflute
1个回答

5
当您在 ScriptBlock 的范围内修改 $count 时,会创建一个本地副本,父级作用域中的原始 $Count 变量不受影响。
有几种方法可以在父作用域中修改 $count,可以使用显式作用域限定符:
$updateBlock = { Write-Host $count; $script:count++; Write-Host $count}

或者通过使用 Get-Variable 命令和相对应的 -Scope 参数(-Scope 1 指的是直接父级作用域)来检索变量:

$updateBlock = { Write-Host $count; (Get-Variable -Scope 1 -Name count).Value++; Write-Host $count}

或者(正如@PetSerAl所指出的那样),使用[ref]关键字:

 $updateBlock = { Write-Host $count; ([ref]$count).Value++; Write-Host $count}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接