更改数组列名称

时间:2015-04-16 13:34:01

标签: arrays powershell

我有一个包含需要修改的NotePoperties的数组。在读取数组时,我需要做一些代码来确定数组列的正确标题应该是什么。

此代码已准备就绪并正常工作:

$Permissions | Get-Member | ? MemberType -EQ NoteProperty | % {
    $Column = $Permissions.($_.Name)
    $GroupResult = Switch ($Column[1]) {
        'GROUP' {$Settings[0].Group  + ' '}
        ''      {break}
        Default {$group + ' '}
    }
    $SiteResult = Switch ($Column[0]) {
        'Site'  {$Settings[0].Code + ' '}
        ''      {break}
        Default {$site + ' '}
    }
    $Result = ($GroupResult + $SiteResult + $_.Name).Trim()
}

我现在要做的是使用上面生成的$Result字符串更新/修改现有标题:

$_.Name = $Result

执行此操作时,PowerShell会抛出错误'Name' is a ReadOnly property.

更改数组标题的最佳方法是什么?我还需要删除第2行和第3行,但之后我可以这样做。

我尝试将$Permissions更新为Plant manager的{​​{1}}数组示例:

Belgium Awesome Plant manager

感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

一种方法是使用Add-Member添加具有所需名称的新NoteProperty,然后从现有名称中复制该值。

话虽如此,看起来你似乎已经over-engineering了很多。

calculated property而不是:

$Permissions = $Permissions |Select-Object @{Name="Belgium Awesome Plant Manager"; Expression = {$_.'Plant Manager'} },'Sales man','Warehouseman'

答案 1 :(得分:1)

同意这是过度设计的,但您可以修改对象。

假设您的对象数组为$permissions,您可以对其进行迭代,使用属性$result中的值添加Plant manager成员,然后删除Plant manager属性:< / p>

$permissions | % { 
    $_ | add-member "$result" -NotePropertyValue $_."Plant Manager"
    $_.psobject.properties.remove("Plant Manager")
}

答案 2 :(得分:0)

您可以创建Add-Member

,而不是使用AliasProperty创建重复值
Get-ChildItem c:\temp | Add-Member -MemberType AliasProperty -Name Measurement -Value Length -PassThru | select Measurement

答案 3 :(得分:0)

对象属性的ReadOnly属性将由对象类型决定。解决这个问题的一种方法是运行对象Select *。这会将对象类型更改为PSSelectedObject或PSCustomObject,具体取决于您的PS版本,并且该属性应该在此过程中丢失ReadOnly属性:

$Permissions | Get-Member | ? MemberType -EQ NoteProperty | Select * |% {