PowerShell Add-Member到数组项

时间:2009-09-05 04:47:26

标签: .net powershell

我正在尝试在数组中的所有项目上使用PowerShell Add-Member cmd,然后访问我稍后添加的成员但它没有显示。

您可以在下面的代码的输出中看到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 个答案:

答案 0 :(得分:5)

你遇到的问题是1,一个整数,是.NET中的一个值类型,当它被传递时,它被复制(按值传递)。因此,您成功修改了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

答案 1 :(得分:2)

我会通过输入less来优化:

$p | add-member noteproperty isPrime $true