首页 > 解决方案 > 创建基于实例执行的方法?

问题描述

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

只是想创建我自己的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')

标签: powershellpowershell-5.1

解决方案


  • 您正在寻找一种实例方法,而不是静态方法,即可以隐式操作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>

      • 可以说,应该完全防止在实际上是相同范围内的这种重新定义,如果您尝试直接在给定范围内重新定义同一个类,情况就是如此。
      • 请参阅GitHub 问题 #8767
    • 如有疑问,请启动新会话以确保您的课程的最新定义生效


推荐阅读