Вопрос

Я пытаюсь добавить элементы к переменной 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 ScriptMethods, GetiTem и SetItem.

Как бы лучший способ реализовать эту функцию GET/LET у члена PSObject в PowerShell?

заранее спасибо

Это было полезно?

Решение

Вы должны добавить -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