我有一个包含需要修改的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
感谢您的帮助。
答案 0 :(得分:1)
一种方法是使用Add-Member
添加具有所需名称的新NoteProperty
,然后从现有名称中复制该值。
话虽如此,看起来你似乎已经over-engineering了很多。
$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 * |% {