質問

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 失敗しました、おそらくそれはまだサポートされていません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top