3

Add-Memberを使用してPowershell変数に要素を追加しようとしています。NotePropertyを使用して静的プロパティを追加し、ScriptMethodを使用してメソッドを追加することに問題はありません。

$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でこれほど簡単なものを見つけることができず、代わりにGetItemとSetItemの2つのスクリプトメソッドを追加することになりました。

PowerShellのPSObjectのメンバーにこのget/let機能を実装するための最良の方法は何でしょうか?

前もって感謝します

4

1 に答える 1

2

追加-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、この例のnoteプロパティのような「保護された/プライベートな」内部値ホルダーを作成する方法(またはそれが可能かどうか)はわかりません。

更新:どうやらそれはタイトルが多かれ少なかれ尋ねるものへの答えです。しかし、問題は実際には、スクリプトブロックを介して実装されたget / setメソッドだけでなく、パラメータ化されたプロパティに関するものです。このタイプのプロパティ(ParameterizedProperty)をで使用しようとしてAdd-Member失敗しました。おそらくまだサポートされていません。

于 2010-11-15T14:21:48.063 に答える