Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

In an PSCustomObject, is it possible to refer an item belonging to it inside itself? [duplicate]

I need to keep inside a PSCustomObject, values at 2 or 3 places and these places are different depending of the object created. The object are hard coded in the script but sometime I need to change the values. But instead of change theses value at 2 or 3 places, is it possible to self refer item instead of edit all the place where the values are?

Here is an example that could explain what I'm trying to do:

$objInfo = [PSCustomObject]@{
        name  = 'TheObjectName'
        color = 'red'
        size  = 'small'
        mystring = "The $($self.name) is $($self.color) and $($self.size)"
    }

Is it possible to refer to itself with something like $self?

like image 892
DDD Avatar asked Oct 23 '25 07:10

DDD


1 Answers

Add-Member let's you modify your existing object by adding members to it; as the name indicates lol. With that said, you can use the membertype of ScriptProperty to add a value referencing the same objects property using the keyword $this:

$objInfo = [PSCustomObject]@{
    name  = 'TheObjectName'
    color = 'red'
    size  = 'small'
} | 
    Add-Member -MemberType 'ScriptProperty' -Name 'MyString' -Value { 
        "The $($this.name) is $($this.color) and $($this.size)." 
    } -PassThru

This can also be done using a class, but to answer your question I used Add-Member. As an alternative, creating the properties value(s) outside your PSCustomObject and then referencing within should give you the same effect. For example:

$name  = 'TheObjectName'
$color = 'red'
$size  = 'small'

$objInfo = [PSCustomObject]@{
    name  = $name
    color = $color
    size  = $size
    mystring = "The $name is $color and $size"
} 
like image 58
Abraham Zinala Avatar answered Oct 24 '25 22:10

Abraham Zinala