是否有一种在Powershell 5类中创建scriptproperty的正确方法

时间:2016-08-24 08:15:41

标签: powershell object

在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

1 个答案:

答案 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)