有没有正确的方法在 Powershell 5 类中创建 scriptproperty

Xav*_*ève 6 powershell object

在 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
Run Code Online (Sandbox Code Playgroud)

gms*_*man 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
Run Code Online (Sandbox Code Playgroud)

=================================================== =====================

编辑-我对课程不熟悉。在 PowerShell 5 中,可以使用 ScriptProperty 成员扩展自定义对象,并指定实时计算的脚本块(无需黑客攻击)。

$test = New-Object psobject
$test | Add-Member -Name currentime -MemberType ScriptProperty -Value {Get-Date}
$test.currentime
Run Code Online (Sandbox Code Playgroud)

可以指定一个-SecondValue处理设置属性的脚本块(测试时不断遇到 StackOverflowException)