有没有在类中创建一个方法来根据填充的字段之一执行某些操作?有点像静态方法。
只是试图创建我自己的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((方法吗?
$Device = [device]::new()
$Device.ComputerName = 'ComputerOne'
我可以用我的方法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-预览版起。7:
-
如果在脚本中直接定义
class
后,您尝试稍后通过点源(. <script>
(在同一脚本中重新定义,则重新定义被悄悄忽略。- 可以说,在有效的相同作用域中进行这样的重新定义应该完全阻止,如果您试图在给定的作用域中直接重新定义相同的类就已经发生了这种情况
- 请参阅GitHub第8767期
-
如果有疑问,请启动新会话,以确保类的最新定义生效。
-