如何解决Powershell - 从自定义事件处理程序访问全局同步哈希表
我正在尝试访问事件处理程序脚本块内的 $syncHash
,但似乎什么也没发生。有办法吗?
$syncHash = [hashtable]::Synchronized(@{})
$syncHash.PostPocess = {
[string]$path = $event.messagedata
...
# trying to access $syncHash here,but Failed
...
}
Register-EngineEvent -SourceIdentifier Process_Result -Action $syncHash.PostPocess
New-Event -SourceIdentifier Process_Result -MessageData $path
谢谢,
解决方法
您的事件脚本块无权访问您注册事件的初始 PowerShell 环境。
一种解决方案是通过事件的 MessageData 处理程序传递同步哈希,这是您修改后的代码:
$syncHash = [hashtable]::Synchronized(@{})
$syncHash.PostPocess = {
# Your $path variable is now in the first cell of the array $event.messagedata
[string]$path = $event.messagedata[0]
...
# Should display 'True',as $event.MessageData[1] is now your initial $syncHash
echo $event.MessageData[1].IsSynchronized
...
}
Register-EngineEvent -SourceIdentifier Process_Result -Action $syncHash.PostPocess
New-Event -SourceIdentifier Process_Result -MessageData @($path,$syncHash)
对于数组,您可以使用 MessageData
的 $event
成员作为参数行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。