PowerShell Add-Member到数组项

Eri*_*ver 4 .net powershell

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

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

有没有办法让这个脚本isPrime在两次调用Get-Member时显示?

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

产量

   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 
Run Code Online (Sandbox Code Playgroud)

Kei*_*ill 5

您遇到的问题是1,一个整数,是.NET中的值类型,当它被传递时,它被复制(按值传递).因此,您成功修改了1的副本,但没有修改数组中的原始副本.如果将1封装(或转换)为对象(引用类型),则可以看到此内容,例如:

$p = @([psobject]1)
$p[0] | %{ add-member NoteProperty isPrime $true; $_ | gm }
$p[0] | gm
Run Code Online (Sandbox Code Playgroud)

OP(spoon16)答案

这就是我的脚本中的代码实际上最终看起来的样子.如果这可以优化,请随时编辑.

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