powershell 在PSCustomObject中,是否可以在其自身内部引用属于它的项?[duplicate]

ar7v8xwq  于 2022-12-18  发布在  Shell
关注(0)|答案(1)|浏览(101)

此问题在此处已有答案

Powershell: reference an object property in another object property from within the same object?(2个答案)
17天前关闭。
我需要在PSCustomObject中保留2或3个位置的值,这些位置根据创建的对象而不同。对象在脚本中硬编码,但有时我需要更改值。但不更改2或3个位置的值,是否可以自引用项,而不是编辑值所在的所有位置?
下面是一个例子,可以解释我正在尝试做的事情:

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

是否可以用类似$self的东西来指代自身?

2uluyalo

2uluyalo1#

Add-Member允许您通过添加成员来修改现有对象;* 就像名称表示lol* 一样。也就是说,您可以使用ScriptProperty的membertype添加一个值,该值引用使用关键字$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

这也可以使用class来完成,但是为了回答你的问题,我使用了Add-Member。作为一种替代方法,在PSCustomObject之外创建属性值,然后在其中引用,应该会给予你同样的效果。例如:

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

$objInfo = [PSCustomObject]@{
    name  = $name
    color = $color
    size  = $size
    mystring = "The $name is $color and $size"
}

相关问题