【发布时间】:2015-10-12 11:57:13
【问题描述】:
我正在 powershell 中创建一个自定义对象。 此对象必须引发事件,但无法使用 new-event CMDLET 分配事件名称。 我厌倦了使用 add-member cmdlet 添加事件,但 powershell 返回一个问题,提示“无法将事件分配给 PSObject”。 还有其他方法可以执行此操作吗? 提前致谢。 德语
【问题讨论】:
标签: powershell
我正在 powershell 中创建一个自定义对象。 此对象必须引发事件,但无法使用 new-event CMDLET 分配事件名称。 我厌倦了使用 add-member cmdlet 添加事件,但 powershell 返回一个问题,提示“无法将事件分配给 PSObject”。 还有其他方法可以执行此操作吗? 提前致谢。 德语
【问题讨论】:
标签: powershell
CmdLets Register-EngineEvent 和 New-Event 可以帮助您注册和触发您自己的事件:
New-Event 必须指定
-SourceIdentifier:你自己的标识符你应该指定
-Sender : 发出事件的对象 -EventArguments : 参数数组 -MessageData : 参数对象这是一个例子:
New-Event -SourceIdentifier "MyOwnEvent" -EventArguments "A Param"
Cmdlet Register-EngineEvent 允许您的代码订阅 Windows PowerShell 引擎事件,以及由 New-Event 触发的事件。
$evt1 = Register-EngineEvent -SourceIdentifier "MyOwnEvent" -Action {[console]::Beep(500,500)}
所以现在您的对象可以有一个名为 Event1 的 note 属性,其值为“MyOwnEvent”,一段代码可以使用Register-EngineEvent 注册到此事件,而您反对可以使用New-Event 触发此事件。
【讨论】:
-编辑,抱歉误读了问题。快速搜索并找到this answer
$o=New-Object PSObject -property @{"_val"=1}
Add-Member -MemberType ScriptMethod -Name "Sqrt" -Value {
write-host "the square root of $($this._val) is $([Math]::Round([Math]::Sqrt($this._val),2))"
} -inputObject $o
Add-Member -MemberType ScriptProperty -Name 'val' -Value{ $this._val } -SecondValue { $this._val=$args[0];$this.Sqrt() } -inputObject $o
【讨论】: