在5之前的Powershell版本中,可以随时随地创建对象"使用 New-Object ,可以使用 Add-Member 进行扩展。 Powershell 5引入了类,但似乎它们只允许基本属性和方法。有没有正确的方法可以模拟 scriptproperty (IE。被视为属性的属性,不是作为方法,但仍然可以随时计算)?
由于构造函数中的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
答案 0 :(得分:0)
不确定我在这里理解这个问题。这就是我创建,扩展和访问自定义对象的方式;如果你正在追求别的东西,请告诉我。
# 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
=============================================== =========================
编辑 - 我不熟悉课程。在PowerShell 5中,可以使用ScriptProperty成员扩展自定义对象,并指定随时计算的脚本块(不需要hackery)。
$test = New-Object psobject
$test | Add-Member -Name currentime -MemberType ScriptProperty -Value {Get-Date}
$test.currentime
可以指定一个-SecondValue
脚本块来处理设置属性(在测试时继续运行到StackOverflowException)