gpt4 book ai didi

events - 脚本 block 的新关闭

转载 作者:行者123 更新时间:2023-12-04 12:43:58 25 4
gpt4 key购买 nike

考虑这段代码:

PS> $timer = New-Object Timers.Timer
PS> $timer.Interval = 1000
PS> $i = 1;
PS> Register-ObjectEvent $timer Elapsed -Action { write-host 'i: ' $i }.GetNewClosure()
PS> $timer.Enabled = 1
i: 1
i: 1
i: 1
...
# wait a couple of seconds and change $i
PS> $i = 2
i: 2
i: 2
i: 2

我假设当我创建新的闭包( { write-host 'i: ' $i }.GetNewClosure() )值为 $i将与此关闭相关联。但在这种情况下不是。在我更改值后, write-host取新值。

另一方面,这有效:
PS> $i = 1;
PS> $action = { write-host 'i: ' $i }.GetNewClosure()
PS> &$action
i: 1
PS> $i = 2
PS> &$action
i: 1

为什么它不适用于 Register-ObjectEvent ?

最佳答案

作业在动态模块中执行;模块具有隔离的 session 状态,并共享对全局变量的访问。 PowerShell 闭包仅在相同的 session 状态/范围链中起作用。烦人,是的。

-Oisin

p.s.我说“作业”是因为事件处理程序实际上是本地作业,与使用 start-job 运行的脚本没有什么不同(仅限本地机器,隐式,不使用 -computer localhost)

关于events - 脚本 block 的新关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2415871/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com