PowerShell 替换数组中的值
PowerShell replace value in an array
我是 PowerShell 的新手,我需要一些关于如何替换数组中的值的支持。请看我的例子:
[array[]]$nodes = @()
[array[]]$nodes = get-NcNode | select-object -property Node, @{Label = "slot"; expression = {@("a")*4}}
$nodes
Node slot
---- ----
nn01 {a,a,a,a}
nn02 {a,a,a,a}
nn03 {a,a,a,a}
nn04 {a,a,a,a}
$nodes[0].slot[0]
a
$nodes[0].slot[0] = "b" #I try to replace a with b
$nodes[0].slot[0]
a #It didn’t work
$nodes[0].slot.SetValue("b",0) #I try to replace a with b
$nodes[0].slot[0]
a #It didn’t work
$nodes[0] | Add-Member -MemberType NoteProperty -Name slot[0] -Value "b" -Force
$nodes[0]
Node slot slot[0]
---- ---- -------
nn01 {a,a,a,a} b #That’s not what I wanted
如果你真的需要一个数组的数组(类型[array[]]
),你的问题解决如下:
$nodes[0][0].slot[0] = "b"
也就是说,你的每个 $nodes
元素本身就是一个数组,你填充 $nodes
的方式,你的 get-NcNode | select-object ...
管道输出的每个 [pscustomobject]
实例变成了它自己的 $nodes
元素,但每个 作为单元素子数组 - 因此需要额外的 [0]
索引访问。 [1]
但是,这听起来像一个常规数组([array]
,实际上与 [object[]]
相同)在您的情况下就足够了,其中每个元素都包含一个(单个,标量)[pscustomobject]
:
# Type constraint [array] creates a regular [object[]] array.
[array] $nodes = get-NcNode | select-object -property Node, @{Label = "slot"; expression = {@("a")*4}}
按这样定义 $nodes
,您的原始代码应该可以工作。
[1] 在 获取 一个值时 - 但在 设置 时不存在 - 你可以在没有额外的情况下离开索引,感谢 PowerShell 的 member-access enumeration 功能。
我是 PowerShell 的新手,我需要一些关于如何替换数组中的值的支持。请看我的例子:
[array[]]$nodes = @()
[array[]]$nodes = get-NcNode | select-object -property Node, @{Label = "slot"; expression = {@("a")*4}}
$nodes
Node slot
---- ----
nn01 {a,a,a,a}
nn02 {a,a,a,a}
nn03 {a,a,a,a}
nn04 {a,a,a,a}
$nodes[0].slot[0]
a
$nodes[0].slot[0] = "b" #I try to replace a with b
$nodes[0].slot[0]
a #It didn’t work
$nodes[0].slot.SetValue("b",0) #I try to replace a with b
$nodes[0].slot[0]
a #It didn’t work
$nodes[0] | Add-Member -MemberType NoteProperty -Name slot[0] -Value "b" -Force
$nodes[0]
Node slot slot[0]
---- ---- -------
nn01 {a,a,a,a} b #That’s not what I wanted
如果你真的需要一个数组的数组(类型[array[]]
),你的问题解决如下:
$nodes[0][0].slot[0] = "b"
也就是说,你的每个 $nodes
元素本身就是一个数组,你填充 $nodes
的方式,你的 get-NcNode | select-object ...
管道输出的每个 [pscustomobject]
实例变成了它自己的 $nodes
元素,但每个 作为单元素子数组 - 因此需要额外的 [0]
索引访问。 [1]
但是,这听起来像一个常规数组([array]
,实际上与 [object[]]
相同)在您的情况下就足够了,其中每个元素都包含一个(单个,标量)[pscustomobject]
:
# Type constraint [array] creates a regular [object[]] array.
[array] $nodes = get-NcNode | select-object -property Node, @{Label = "slot"; expression = {@("a")*4}}
按这样定义 $nodes
,您的原始代码应该可以工作。
[1] 在 获取 一个值时 - 但在 设置 时不存在 - 你可以在没有额外的情况下离开索引,感谢 PowerShell 的 member-access enumeration 功能。