提问人:Xavier Plantefève 提问时间:8/24/2016 更新时间:8/29/2016 访问量:1504
是否有在 Powershell 5 类中创建脚本属性的正确方法
Is there a proper way to create a scriptproperty in a Powershell 5 class
问:
在 5 之前的 Powershell 版本中,可以使用 New-Object “随时随地”创建对象,也可以使用 Add-Member 进行扩展。Powershell 5 引入了类,但似乎它们只允许基本属性和方法。有没有适当的方法可以模拟脚本属性(即,一个被视为属性的属性,而不是一种方法,但仍然在旅途中计算)?
由于构造函数中的黑客攻击,以下代码给出了所需的结果。这种黑客攻击可以避免吗?
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赞
G42
8/24/2016
#1
不确定我是否理解这里的问题。这就是我创建、扩展和访问自定义对象的方式;如果您想要其他东西,请告诉我。
# 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 成员扩展自定义对象,并指定在旅途中计算的脚本块(无需黑客)。
$test = New-Object psobject
$test | Add-Member -Name currentime -MemberType ScriptProperty -Value {Get-Date}
$test.currentime
可以指定一个处理属性设置的脚本块(在测试时继续运行到 StackOverflowException)-SecondValue
评论
0赞
Xavier Plantefève
8/24/2016
我想使用类,这就是重点。它更强大,更易于阅读和维护。但是我找不到一种方法来模拟 Add-Member 最棘手的成员类型。
评论