我正在尝试将元素添加到带有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 失败了,也许尚未得到支持。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top