我在powershell中创建了一个自定义对象。 此对象必须引发事件,但无法使用新事件CMDLET分配事件名称。 我厌倦了添加一个带有add-member cmdlet的事件,但是powershell返回的一个问题是"无法将事件分配给PSObject"。 还有另一种方法可以执行此操作吗? 提前致谢。 锗
答案 0 :(得分:0)
-Edit,抱歉误读了这个问题。快速搜索并调高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
答案 1 :(得分:0)
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
激活此事件。