PowerShell中的VBscript公共属性集/获取等效项
我正在尝试使用add Member向Powershell变量添加元素。 我可以用NoteProperty添加静态属性,用ScriptMethod添加方法,如下所示:PowerShell中的VBscript公共属性集/获取等效项,powershell,cmdlets,Powershell,Cmdlets,我正在尝试使用add Member向Powershell变量添加元素。 我可以用NoteProperty添加静态属性,用ScriptMethod添加方法,如下所示: $variable = New-Object PSObject $variable | Add-Member NoteProperty Key "Value" $variable | Add-Member ScriptMethod DoSomething { // code } 现在我被困在这个问题上: 我想添加一个属性,该属性有
$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中找不到这么简单的东西,结果添加了两个scriptmethods,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
测试:
它打印:
Getting...
Original value: 42
Setting...
Getting...
After assignment: 123
不幸的是,我不知道如何使“受保护/私有”内部值持有者像我们示例中的note属性\u MyProperty
(或者是否可能)
更新:显然,这是对标题或多或少要求的答案。但问题实际上是关于参数化属性,而不仅仅是通过脚本块实现的get/set方法。我尝试将此类型的属性(
ParameterizedProperty
)与Add Member
一起使用失败,可能它还不受支持。您可以使用Add Member
添加ParameterizedProperty
,但我找不到这样做的示例。文档在这方面有点缺乏。是的,parameterizedproperty似乎是我想要的,但它被保留用于其他用途,因为我做的每个测试都会产生相同的错误消息,说明Add Member无法添加parameterizedproperty类型的成员。错误消息指出我应该选择另一个MemberTyper。参数化属性不用于最终用户-它们主要用于COM适配器。谢谢,Roman。不幸的是,这不允许这种访问:$variable.MyProperty(“property1”)=“value1”,这就是我想要的。看起来我回答了另一个问题。那么@Joey是对的,听起来你应该使用parametricedproperty
type。而且看起来parametricedproperty
不受支持。如果我尝试,PS会说:“添加成员:无法添加类型为“ParameterizedProperty”的成员。请为MemberTypes参数指定其他类型。”因此,您的GetItem
/SetItem
脚本方法可能是一种方法。答案可以。我想这在纯Powershell中确实是不可行的,因为不能通过add member创建parameterizedproperty成员。
Getting...
Original value: 42
Setting...
Getting...
After assignment: 123