给定一个嵌套的PowerShell自定义对象:
$O = [PSCustomObject]@{
ParentValue = 100
ChildValueArray = @(
[PSCustomObject]@{ Name = 'First'; Value = 1 },
[PSCustomObject]@{ Name = 'Second'; Value = 2 }
)}
我想在" ChildArray"中为每个对象添加一个脚本属性。引用值" ParentValue"在封闭的对象中。从概念上讲,我想做以下事情:
$O.ChildValueArray | Add-Member -MemberType ScriptProperty -Name Diff -Value { $this.Value + $parent.ParentValue }
然而,我找不到与$ this相当的$ parent。
有没有办法实现这种行为,以便结果:
$O.ChildValueArray | Format-Table -AutoSize
时:
Name Value Diff
---- ----- ----
First 1 101
Second 2 102
而不是当前值:
Name Value Diff
---- ----- ----
First 1 1
Second 2 2
我怀疑这是不可能的,原因如下:
答案 0 :(得分:2)
这似乎对我很好:
$parent = [PSCustomObject]@{
ParentValue = 100
ChildValueArray = @(
[PSCustomObject]@{ Name = 'First'; Value = 1; },
[PSCustomObject]@{ Name = 'Second'; Value = 2; }
)}
$parent.ChildValueArray `
| % {
Add-Member `
-InputObject $_ `
-MemberType ScriptProperty `
-Name Diff `
-Value { $this.Value + $parent.ParentValue } }
测试它会产生我期望的行为:
$parent.ChildValueArray | ft *
$parent.ParentValue = 200
$parent.ChildValueArray | ft *
$parent.ChildValueArray[0].Value = 100
$parent.ChildValueArray | ft *
输出:
Name Value Diff
---- ----- ----
First 1 101
Second 2 102
Name Value Diff
---- ----- ----
First 1 201
Second 2 202
Name Value Diff
---- ----- ----
First 100 300
Second 2 202
实际上,经过进一步测试后,我发现For-Each
是不必要的。如果只是在$parent
命令中将$O
替换为Add-Member
,则代码可以正常工作。他们是否有任何理由需要引用相对于孩子的父母而不是简单地用绝对术语指定父母?除非您计划将孩子重新分配给新的父母,否则您不应该使用这种方法遇到任何问题。