【问题标题】:PowerShell Add-Member to array itemsPowerShell 将成员添加到数组项
【发布时间】:2010-11-25 19:58:37
【问题描述】:

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

【问题讨论】:

    标签: .net powershell


    【解决方案1】:

    您遇到的问题是 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
    

    【讨论】:

    • 谢谢! KTM 和 Moab(拍摄地点)非常好地结合在一起。 :-)
    【解决方案2】:

    我会优化,输入 less:

    $p | add-member noteproperty isPrime $true
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-23
      相关资源
      最近更新 更多