【问题标题】:It is possible to add an event to custom objects in powershell?是否可以在 powershell 中向自定义对象添加事件?
【发布时间】:2015-10-12 11:57:13
【问题描述】:

我正在 powershell 中创建一个自定义对象。 此对象必须引发事件,但无法使用 new-event CMDLET 分配事件名称。 我厌倦了使用 add-member cmdlet 添加事件,但 powershell 返回一个问题,提示“无法将事件分配给 PSObject”。 还有其他方法可以执行此操作吗? 提前致谢。 德语

【问题讨论】:

    标签: powershell


    【解决方案1】:

    CmdLets Register-EngineEventNew-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)}
    

    所以现在您的对象可以有一个名为 Event1note 属性,其值为“MyOwnEvent”,一段代码可以使用Register-EngineEvent 注册到此事件,而您反对可以使用New-Event 触发此事件。

    【讨论】:

      【解决方案2】:

      -编辑,抱歉误读了问题。快速搜索并找到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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-12-06
        • 2021-07-12
        • 2023-03-12
        • 2012-05-05
        • 2022-09-28
        • 1970-01-01
        • 1970-01-01
        • 2021-06-30
        相关资源
        最近更新 更多