PowerShell中的VBscript公共属性集/获取等效项

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 } 现在我被困在这个问题上: 我想添加一个属性,该属性有

我正在尝试使用add Member向Powershell变量添加元素。 我可以用NoteProperty添加静态属性,用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中找不到这么简单的东西,结果添加了两个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