powershell - 创建基于实例执行的方法?
问题描述
有没有像在类中创建一个方法来根据一个填充字段做某事这样的事情?有点像静态方法。
只是想创建我自己的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 吗?
$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-preview.7 开始:
如果在您的脚本中
class
直接定义您之后,您稍后尝试通过dot-sourcing ( )在同一脚本中重新定义它,则重新定义将被悄悄忽略。. <script>
- 可以说,应该完全防止在实际上是相同范围内的这种重新定义,如果您尝试直接在给定范围内重新定义同一个类,情况就是如此。
- 请参阅GitHub 问题 #8767
如有疑问,请启动新会话以确保您的课程的最新定义生效。
推荐阅读
- azure-devops - 在 Azure Devops 的 mono repo 中设置项目的工作目录
- pytorch-lightning - PyTorch Lightning:同一张量板图中的多个标量(例如训练和有效损失)
- c - 在 C 中努力实现 bsearch
- c++ - 使用(MLA 指令)将 C++ 转换为 ARM 程序集
- javascript - 按钮上的 Google Apps 脚本 + React Web 应用程序错误提交“不安全的 Javascript 尝试...框架正在尝试导航顶级窗口”
- java - Eclipse IDE 在项目不存在时显示警告
- python - Python乌龟中的重复功能
- python-3.x - Django ModelManager 没有正确保存模型实例
- sql - CASE WHEN 中的 COUNT 导致 Invalid Column 错误
- python - Selenium webdriver url链接组合错误