PowerShell向数组项添加成员

4

我尝试在数组的所有项上使用PowerShell Add-Member命令,然后稍后访问我添加的成员,但它并未显示出来。

从以下代码的输出中可以看到,NoteProperty似乎存在于foreach语句的范围内,但在该范围之外的同一对象上不存在。

有没有办法使此脚本在两个对Get-Member的调用中都显示isPrime?

$p = @(1)
$p[0] | %{ add-member -inputobject $_ -membertype noteproperty -name isPrime -value $true; $_ | gm }
$p[0] | gm

输出

   TypeName: System.Int32

Name        MemberType   
----        ----------   
CompareTo   Method       
Equals      Method       
GetHashCode Method       
GetType     Method       
GetTypeCode Method       
ToString    Method       
isPrime     NoteProperty 


CompareTo   Method      
Equals      Method      
GetHashCode Method      
GetType     Method      
GetTypeCode Method      
ToString    Method 
2个回答

5
你遇到的问题是,1是.NET中的值类型(value type),当它被传递时会被复制(按值传递)。因此,你成功修改了1的副本,而不是数组中原始的那个。如果你将1装箱(或强制转换)为对象(引用类型),就可以看到这一点,例如:
$p = @([psobject]1)
$p[0] | %{ add-member NoteProperty isPrime $true; $_ | gm }
$p[0] | gm

OP (spoon16)回答:

这是我的脚本代码实际上的样子。如果可以进行优化,请随意编辑。

$p = @() #declare array
2..$n | %{ $p += [psobject] $_ } #initialize
$p | add-member -membertype noteproperty -name isPrime -value $true

谢谢!KTMs和Moab(照片拍摄地)非常搭配。 :-) - Keith Hill

2

我会通过减少输入来进行优化:

$p | add-member noteproperty isPrime $true

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接