powershell - 是否有在 Powershell 5 类中创建脚本属性的正确方法

标签 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

最佳答案

不确定我理解这里的问题。这就是我创建、扩展和访问自定义对象的方式;如果你在追求别的东西,请告诉我。

# 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/

相关文章:

使用 toSource() 的 Javascript 对象序列化将特殊字符转换为十六进制代码 - 如何反转?

Javascript 在对象数组中找到最接近的数字并检索对象的键值

java - Perl 数组作为对象变量

powershell - 在powershell中是否有!$等效项?

c# - 向巧克力之神嘘

PowerShell DSC 脚本资源失败

c# - 如何在不知道提前指定数量的情况下创建对象数组

javascript - jQuery 原型(prototype)和构造函数链接

c# - 是否可以使用 powershell 加载多个 .dll?

.net - System.IO.Compression.DeflateStream 的数据格式