PowerShell:创建对象时能否在同一对象的属性中引用另一属性?
PowerShell自定义对象创建问题解答
你的目标写法不可行,原因很直接:在执行New-Object创建$Obj的过程中,哈希表里的所有属性值会被优先计算完成,此时$Obj还没完成赋值,引用$Obj.name只会得到$null,最终Type属性的值会变成$null + "world",也就是world,完全达不到你想要的helloworld效果。
下面是几种可行的替代方案:
方案1:先缓存属性值,再构造对象
先把Name的值存到临时变量里,再用这个变量生成Type属性:
$nameVal = "hello" $Obj = New-Object PSObject -Property @{ Name = $nameVal Type = $nameVal + "world" }
方案2:用Select-Object实现“一行式”创建
借助Select-Object的计算属性特性,在管道上下文里可以直接引用已定义的属性:
$Obj = "" | Select-Object @{Name='Name'; Expression={'hello'}}, @{Name='Type'; Expression={$_.Name + 'world'}}
方案3:使用[PSCustomObject]类型加速器(推荐)
PowerShell 3.0及以上版本支持这种更简洁高效的写法,同样需要先缓存属性值:
$nameVal = "hello" $Obj = [PSCustomObject]@{ Name = $nameVal Type = $nameVal + "world" }
内容的提问来源于stack exchange,提问作者Fitzgery
相关产品推荐
相关产品推荐

