我正在尝试在数组中的所有项目上使用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
答案 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