VBScript公共财产设置/获得PowerShell等价
-
10-10-2019 - |
题
我正在尝试将元素添加到带有add-ember的powershell变量中。我毫无疑问地添加具有注意到的静态属性以及使用ScriptMethod的方法,这样的方法是:
$variable = New-Object PSObject
$variable | Add-Member NoteProperty Key "Value"
$variable | Add-Member ScriptMethod DoSomething { // code }
现在我坚持了下来:
我想添加一个具有Getter和setter的属性,并通过代码块做很多事情。
VBScript等效的是:
Class MyClass
Public Property Get Item(name)
// Code to return the value of Item "name"
End Property
Public Property Let Item(name,value)
// Code to set the value of Item "name" to value "value"
End Property
End Class
请注意,我需要编写的代码部分不仅要设置/获取值,还比该部分更复杂(设置其他相关变量,访问外部数据等)。
我未能在PowerShell中找到任何简单的东西,最终添加了2个脚本方法,GetItem和setItem。
在PowerShell中,在PSObject成员中实现此GET/LET功能的最佳方法是什么?
提前致谢
解决方案
您应该添加 -MemberType ScriptProperty
并使用 -Value
和 -SecondValue
:
# Make an object with the script property MyProperty
$variable = New-Object PSObject
# “internal” value holder
$variable | Add-Member -MemberType NoteProperty _MyProperty -Value 42
# get/set methods
$get = {
Write-Host "Getting..."
$this._MyProperty
}
$set = {
Write-Host "Setting..."
$this._MyProperty = $args[0]
}
# the script property
$variable | Add-Member -MemberType ScriptProperty MyProperty -Value $get -SecondValue $set
测试:
Write-Host "Original value: $($variable.MyProperty)"
$variable.MyProperty = 123
Write-Host "After assignment: $($variable.MyProperty)"
它打印:
Getting...
Original value: 42
Setting...
Getting...
After assignment: 123
不幸的是,我不知道如何制作“受保护/私人”的内部价值持有人,例如Note属性 _MyProperty
在我们的示例中(或根本不可能)。
更新: :显然,这是标题提出的或多或少的答案。但是问题实际上是关于参数化属性的,而不仅仅是通过脚本块实现的获取/设置方法。我尝试使用这种类型的属性(ParameterizedProperty
) 和 Add-Member
失败了,也许尚未得到支持。
不隶属于 StackOverflow