vbscript公共プロパティセット/PowerShellで同等の取得
-
10-10-2019 - |
質問
ADDメンバーを使用してPowerShell変数に要素を追加しようとしています。 Motipropertyに静的プロパティを追加するのに問題はありません。
$variable = New-Object PSObject
$variable | Add-Member NoteProperty Key "Value"
$variable | Add-Member ScriptMethod DoSomething { // code }
今、私はこれに立ち往生しています:
ゲッターとセッターを備えたプロパティを追加し、コードブロックを介してたくさんのことを行いたいと思います。
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つの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
テスト:
Write-Host "Original value: $($variable.MyProperty)"
$variable.MyProperty = 123
Write-Host "After assignment: $($variable.MyProperty)"
印刷:
Getting...
Original value: 42
Setting...
Getting...
After assignment: 123
残念ながら、私はノートプロパティのような「保護/プライベート」な内部価値保有者を作る方法を知りません _MyProperty
私たちの例では(またはそれがまったく可能かどうか)。
アップデート: :どうやらそれは、タイトルが多かれ少なかれ尋ねるものに対する答えです。しかし、問題は、実際には、スクリプトブロックを介して実装された取得/セットメソッドだけでなく、パラメーター化されたプロパティに関するものです。このタイプのプロパティを使用しようとする私の試み(ParameterizedProperty
) と Add-Member
失敗しました、おそらくそれはまだサポートされていません。