Powershell:从同一对象中引用另一个对象属性中的对象属性?



晚上的人,只是一个小问题,如果可能的话。

我知道我可以通过将其调用为空对象然后逐个添加属性来做到这一点。

$Obj = New-Object PSObject
$Obj.name = “hello”
$Obj.type = $Obj.name ‘+’ “world”

有没有办法将其作为一个属性线来做到这一点?

$Obj = New-Object PSObject -Property @{
Name = “hello”
Type = $Obj.name ‘+’ “world”
}

这可能有助于您使用PowerShellclass完成所需的内容:

  • 定义
class SomeClass {
[string] $Name
[string] $Type
SomeClass() { }
SomeClass([string] $Name, [string] $Type) {
# ctor for custom Type
$this.Name = $Name
$this.Type = $Type
}
static [SomeClass] op_Explicit([string] $Name) {
# explicit cast using only `Name`
return [SomeClass]::new($Name, $Name + 'World')
}
}

现在,您可以使用Type的自定义值进行实例化:

PS ..> [SomeClass]@{ Name = 'hello'; Type = 'myCustomType' }
Name  Type
----  ----
hello myCustomType

或者让显式运算符根据Name参数处理Type属性的预定义值:

PS ..> [SomeClass] 'hello'
Name  Type
----  ----
hello helloWorld

Santiago Squarzon的有用答案展示了如何通过定义创建专用.NET类型的class来解决问题。

但是,可以使用以下解决方法避免创建专用的 .NET 类,该解决方法使用辅助变量,并且将变量赋值括在(...)中会传递赋值的值:

$obj = [pscustomobject] @{
Name = ($name = 'hello')  # assign 'hello' to $name and pass the value through
Type = $name + 'world'    # use the value assigned to $name above
}

注意:这取决于属性定义的顺序派生属性值必须放在定义 aux. 变量的属性值之后

输出$obj到显示器打印件:

Name  Type
----  ----
hello helloworld

另请参阅:

  • GitHub 问题 #13782,它要求内置机制用于内部交叉引用哈希表的条目,这同样适用于自定义对象文字。

最新更新