在 5 之前的 Powershell 版本中,可以使用 New-Object “随时”创建对象,并且可以使用 Add-Member 进行扩展。 Powershell 5 引入了类,但它们似乎只允许基本的属性和方法。是否有任何适当的方法可以模拟脚本属性(即,被视为属性的属性,而不是方法,但仍然在运行中计算)?
由于构造函数中的 hack,以下代码给出了想要的结果。可以避免这种黑客攻击吗?
class fakescriptproperty {
hidden [datetime] _currenttime() { return ( Get-Date ) }
fakescriptproperty() {
Add-Member -InputObject $this -MemberType ScriptProperty `
-Name currenttime -Value { $this._currenttime() }
}
}
$test = New-Object -TypeName fakescriptproperty
$test.currenttime
最佳答案
不确定我理解这里的问题。这就是我创建、扩展和访问自定义对象的方式;如果你在追求别的东西,请告诉我。
# Creating new object with key/value hashtable
$customObject = New-Object psobject -Property @{key1 = "value" ; key2 = "value2"}
# Adding member to custom object
$customObject | Add-Member -MemberType NoteProperty -Name key3 -Value value3
# This will return value3
$customObject.key3
================================================== ======================
编辑 - 我对类(class)不熟悉。在 PowerShell 5 中,可以使用 ScriptProperty 成员扩展自定义对象,并指定一个随时计算的脚本块(不需要hacky)。
$test = New-Object psobject
$test | Add-Member -Name currentime -MemberType ScriptProperty -Value {Get-Date}
$test.currentime
可以指定
-SecondValue
处理设置属性的脚本块(测试时继续运行 StackOverflowException)
关于powershell - 是否有在 Powershell 5 类中创建脚本属性的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39117935/