我正在尝试在数组中的所有项目上使用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)
您遇到的问题是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)
归档时间: |
|
查看次数: |
4594 次 |
最近记录: |