Question

Je suis en train d'ajouter des éléments à une variable Powershell avec Add-Member. Je n'ai pas de problème en ajoutant des propriétés statiques avec NoteProperty, et les méthodes avec ScriptMethod, comme ça:

$variable = New-Object PSObject
$variable | Add-Member NoteProperty Key "Value"
$variable | Add-Member ScriptMethod DoSomething { // code }

Maintenant, je suis coincé sur ceci:

Je veux ajouter une propriété qui a un getter et un setter et fait un tas de choses par bloc de code.

L'équivalent VBScript serait ceci:

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

Notez que les sections de code que je dois écrire faire plus que simplement définir / obtenir la valeur, ils sont plus complexes que d'autres (donner des variables connexes, l'accès des données externes, etc ...).

J'ÉCHEC de tout ce facile PowerShell et a fini par ajouter 2 au lieu scriptmethods, GetItem et SetItem.

Quelle serait la meilleure façon de mettre en œuvre ce get / laisser dans un functionnality membre d'un PSObject dans PowerShell?

Merci à l'avance

Était-ce utile?

La solution

Vous devriez ajouter -MemberType ScriptProperty et l'utilisation -Value et -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

Test:

Write-Host "Original value: $($variable.MyProperty)"
$variable.MyProperty = 123
Write-Host "After assignment: $($variable.MyProperty)"

Il imprime:

Getting...
Original value: 42
Setting...
Getting...
After assignment: 123

Malheureusement, je ne sais pas comment faire la valeur interne « protégés / privés » comme le porte-_MyProperty propriété note dans notre exemple (ou si elle est possible).

UPDATE : Apparemment, il est la réponse à ce que plus ou moins le titre demande. Mais la question est en fait sur la propriété paramétrés, non seulement obtenir / méthodes mis en œuvre par des blocs de script. Ma tentative d'utiliser ce type de propriété (ParameterizedProperty) avec Add-Member a échoué, peut-être n'a pas encore pris en charge.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top