VBscript publique Propriété Set / Get équivalent dans PowerShell
-
10-10-2019 - |
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
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.