创建一个基于关闭实例执行的方法?

Creating a method to execute based off instance?

是否有在 class 中创建一个方法来根据其中一个填充字段做某事这样的事情?有点像静态方法。

只是想创建我自己的 Ping() 方法,但是,希望它只使用已经填充的 ComputerName 属性。

Class Device {
    
    [string]$ComputerName
    [string]$Status
    [string]$Manufacturer
    [string]$Model
    [string]$SerialNumber

    [Void]Ping($ComputerName) {
        
        $Echo_Reply = Test-Connection -ComputerName $ComputerName -Count 1 -Quiet

        $this.Status = $Echo_Reply

    }

}

所以如果我实例化它,为 属性 分配一个计算机名称,我可以直接使用我的 Ping() 方法而不引用它吗?实际上 ping?

我可以只使用我的方法来 ping 它吗:$Device.Ping(),而不是引用它 $Device.Ping('ComputerOne')

  • 您正在寻找实例方法,而不是静态 一个,即可以隐式操作手头 class 的实例的特定状态。

  • 您问题中的代码定义的 实例方法,并且正如 mclayton 指出的那样,您必须 使用 $this.<property-name> 从实例方法 中引用实例的属性,因此您的方法可以重新定义为:

    [void] Ping() {        
      $this.Status = Test-Connection -ComputerName $this.ComputerName -Count 1 -Quiet
    }
    
  • 陷阱,从 PowerShell Core 7.2.0-preview.7 开始:

    • 如果在脚本中直接class定义后,您尝试重新定义它后来 在同一个脚本 中通过 dot-sourcing (. <script>),重新定义被 悄悄忽略

      • 可以说,在 相同 范围内的这种重新定义应该完全 prevented,如果你尝试在给定范围内直接重新定义相同的 class
      • GitHub issue #8767
    • 如有疑问,启动新会话以确保最新定义你的class生效.